Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架。框架下内容比较多,可以做到按照角色权限对请求路径进行限制。今天主要验证自定义登录页,在内存用户存储中进行请求的权限校验。闲话休提,下面直接探讨我的验证过程,如果有比较好的意见,欢迎各位指正。

1、系统使用Maven进行jar包管理,spring用的5.0版本。首先在pom文件中添加Spring Security的jar包依赖

  <dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${security-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${security-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${security-version}</version>
</dependency>

2、添加SecurityConfig 文件,对WebSecurityConfigurerAdapter类进行扩展,重写configure方法。(WebSecurityConfigurerAdapter是对应用中安全框架的个性化定制)

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* HTTP请求处理
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin().loginPage("/user/login.do")
.defaultSuccessUrl("/free/list.do")//启用FORM登录
.and().authorizeRequests().antMatchers("/user/login.do").permitAll()//登录页允许所有人访问
.and().authorizeRequests().antMatchers("/**/*.do").authenticated()
.and().httpBasic()
.and().csrf().disable(); //暂时禁用CSRF
}
/**
* 授权验证服务
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
/*auth.inMemoryAuthentication()
.withUser("simm").password("{noop}123").roles("USER").and()
.withUser("admin").password("{noop}admin").roles("USER","ADMIN");*/ auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance())
.withUser("simm").password("123").roles("USER").and()
.withUser("admin").password("admin").roles("USER","ADMIN");
}
//.and().requiresChannel().regexMatchers("^((?!/user/login).)*.do").requiresSecure()
//.regexMatchers("^((?!/user/login).)*.do")
}

   备注:新版本的Spring Security要求必须为用户配置提供编码器,否则会报找不到相应的编码器错误。这里有个不是很重要的知识点,假如我们没有调用passwordEncoder方法为用户验证指明编码器,那么有一种替代方案,就是在密码前加"{noop}"等前缀,跟踪源码发现,框架会自动解析{}中的key去匹配相应的编码器。下面提供一个调试的图,可以了解下。

3、添加AppInitializer类,对AbstractSecurityWebApplicationInitializer进行扩展实现,系统启动会自动插入SpringSecurityFilter,完成对请求的安全性拦截。

public class AppInitializer extends AbstractSecurityWebApplicationInitializer   { }

下面截图为AbstractSecurityWebApplicationInitializer中SpringSecurityFilter的启用过程,可做参考。

4、添加登录控制Controller。action接两个可选的请求参数error,logout。当登录失败,框架会重定向到登录页添加一个error参数。当调用/logout 退出系统时,框架在执行完退出事件,清理完身份信息后,重定向回登录页,携带一个logout参数。

@Controller
@RequestMapping("/user")
// 添加session信息的注解,可以实现 session信息与map的映射 赋值
@SessionAttributes("user")
public class UserController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout,Model model) {
if (error != null) {
model.addAttribute("msg", "用户名或密码错误!");
}
if (logout != null) {
model.addAttribute("msg", "成功退出!");
}
return "user/login";
}

5、接下来开始访问系统查看框架应用后的结果

  • 直接访问非登录页,由于没有登录,系统跳转至授权登录页面

  • 验证登录失败,重定向回登录页并自动携带error参数

  • 验证登录成功,重定向到成功页面

  • 点击退出系统

    

安全性框架内容比较广泛,后面将尝试读取数据库中用户,自定义用户校验,https请求,跨站请求伪造等方面的功能。今天的内容比较简单,先作为第一波的敲门砖。

Spring-Security自定义登录页&inMemoryAuthentication验证的更多相关文章

  1. Spring Security 自定义登录认证(二)

    一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...

  2. (二)spring Security 自定义登录页面与校验用户

    文章目录 配置 security 配置下 MVC 自定义登录页面 自定义一个登陆成功欢迎页面 效果图 小结: 使用 Spring Boot 的快速创建项目功能,勾选上本篇博客需要的功能:web,sec ...

  3. spring boot 下 spring security 自定义登录配置与form-login属性详解

    package zhet.sprintBoot; import org.springframework.beans.factory.annotation.Autowired;import org.sp ...

  4. Spring Boot整合Spring Security自定义登录实战

    本文主要介绍在Spring Boot中整合Spring Security,对于Spring Boot配置及使用不做过多介绍,还不了解的同学可以先学习下Spring Boot. 本demo所用Sprin ...

  5. Spring Security 自定义登录页面

    SpringMVC + Spring Security,自定义登录页面登录验证 学习参考:http://www.mkyong.com/spring-security/spring-security-f ...

  6. spring security采用自定义登录页和退出功能

    更新... 首先采用的是XML配置方式,请先查看  初识Spring security-添加security 在之前的示例中进行代码修改 项目结构如下: 一.修改spring-security.xml ...

  7. Spring Security笔记:自定义登录页

    以下内容参考了 http://www.mkyong.com/spring-security/spring-security-form-login-example/ 接上回,在前面的Hello Worl ...

  8. 【认证与授权】Spring Security自定义页面

    在前面的篇幅中,我们对认证和授权流程大致梳理了一遍.在这个过程中我们一直都是使用系统生成的默认页面,登录成功后也是直接调转到根路径页面.而在实际的开发过程中,我们是需要自定义登录页面的,有时还会添加各 ...

  9. 【JavaEE】SSH+Spring Security自定义Security的部分处理策略

    本文建立在 SSH与Spring Security整合 一文的基础上,从这篇文章的example上做修改,或者从 配置了AOP 的example上做修改皆可.这里主要补充我在实际使用Spring Se ...

随机推荐

  1. QTP10破解方法及mgn-mqt82.exe下载

    经试验可以成功安装license,具体步骤如下:一.从HP官方网上下载QTP10.0并安装.二.安装成功后,在C:\Program Files\Common Files\Mercury Interac ...

  2. Oracle临时表空间组

    Oracle 10g之前,同一用户的多个会话只可以使用同一个临时表空间,因为在给定的时间只有一个临时表空间默认给用户,为了解决这个潜在的瓶颈,Oracle支持临时表空间组即包含多个临时表空间的集合.临 ...

  3. id,is的用法,小数据池的概念及编码知识进阶

    一:id 查询内存地址 name = 'alex' print(id(name)) li = [1,2,3] print(id(li)) 二:is  判断的是内存地址 name1 = 'alex@' ...

  4. 前端css常用class命名id命名

    1.常用id的命名: (1)页面结构 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sideba ...

  5. BSA Network Shell系列-通过NSH执行Powershell,VBScript或bat files脚本

    参考:Running Powershell, VBScript, or bat files via NSH 如果你直接在NSH命令行执行的话,可以参考我翻译的下面的东东,如果想运行NSH 脚本作业的话 ...

  6. border-image用法详解

    图像边框 border-image使用方法:border-image:url('图像路径') 边距(不能带单位)/宽度 上下方式 左右方式:(四个边距,上右下左,相同时可缩写为一个)repeat平铺 ...

  7. [DeeplearningAI笔记]ML strategy_2_2训练和开发/测试数据集不匹配问题

    机器学习策略-不匹配的训练和开发/测试数据 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.4在不同分布上训练和测试数据 在深度学习时代,越来越多的团队使用和开发集/测试集不同分布的数据来 ...

  8. ElasticSearch 6 Windows 安装

    前言 目前使用ElasticSearch 6.2最新版本,这里记录其在windows 2012R2系统上的安装步骤. 安装 1. 安装java,最新版本的ElasticSearch 需要java8 版 ...

  9. Mysql基础安装,初视篇

    mysql 跟所有的数据库软件一样分为  服务端和客户端: 下载:在官网里面选择 download 社区版本,mysql,社区版本 安装: win环境下: 第一步:解压文件出来 第二步:在bin文件下 ...

  10. 2017年总结的前端文章——CSS盒模型详解

    CSS的盒模型是CSS的基础,同时也是难点,这个问题经常在面试中会被问到,属于经典问题了.很多博客里讲得也很模糊不清,于是,我在这里重新整理一下. 可以认为每个html标签都是一个方块,然后这个方块又 ...