springsecurity详解
Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.
目录
概述
1.springsecurity
需求:
设计思路
springsecurity底层实现为一条过滤器链,就是用户请求进来,判断有没有请求的权限,抛出异常,重定向跳转。
实现思路分析
1.URL管理
springsecurity自带一个登录页。
/**
- 表单登陆security
- 安全 = 认证 + 授权
*/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//以下五步是表单登录进行身份认证最简单的登陆环境
http.formLogin() //表单登陆 1
.and() //2
.authorizeRequests() //下面的都是授权的配置 3
.anyRequest() //任何请求 4
.authenticated(); //访问任何资源都需要身份认证 5
}
}
2.复写configure
如果只实现一个WebSecurityConfigurerAdapter然后重写一下configure方法,效果会默认使用springsecurity的登录页 ,以及项目启动时后台会打印出一个默认的密码,然后使用任意账号就可以进行登录访问指定的资源
3.自定义登录页 与 UserDetailsService 用户名密码校验
如果想要使用自己的登录页 并且用户名密码是自己数据库中的,进一步完善spring security认证体系,首先需要做以下配置。
@Override
protected void configure(HttpSecurity http) throws Exception {
//以下五步是表单登录进行身份认证最简单的登陆环境
http.formLogin() //表单登陆 1
.loginPage(“/login.html”) //指定登陆页面
.and() //2
.authorizeRequests() //下面的都是授权的配置 3
.antMatchers(“/login.html”).permitAll()//访问此地址就不需要进行身份认证了,防止重定向死循环
.anyRequest() //任何请求 4
.authenticated(); //访问任何资源都需要身份认证 5
}
4.4.登陆页面提交页面 /authentication/form
添加登陆页面提交页面,关闭跨站请求伪造攻击,登陆访问资源。
5.数据处理器
在这个过程一般在数据存储和,存储到mysql中,或者进行其他逻辑判断等。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h2>标准登陆页面</h2>
<h3>表单登陆</h3>
<form action = "/authentication/form" method ="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">登陆</button></td>
</tr>
</table>
</form>
</body>
</html>
@Override
protected void configure(HttpSecurity http) throws Exception {
//以下五步是表单登录进行身份认证最简单的登陆环境
http.formLogin() //表单登陆 1
.loginPage("/login.html") //指定登陆页面
.loginProcessingUrl("/authentication/form")//登陆页面提交的页面 开始使用UsernamePasswordAuthenticationFilter过滤器处理请求
.and() //2
.authorizeRequests() //下面的都是授权的配置 3
.antMatchers("/login.html").permitAll()//访问此地址就不需要进行身份认证了,防止重定向死循环
.anyRequest() //任何请求 4
.authenticated() //访问任何资源都需要身份认证 5
.and()
.csrf().disable();//关闭跨站请求伪造攻击拦截
}
参考资料和推荐阅读
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~