准备系统的研究下Spring Security:https://www.youtube.com/watch?v=her_7pa0vrg
先了解一下Http请求状态码
400 Bad request
401 Unauthorized 未认证
403 Forbidden 权限不足,注意,权限不足的前提是已经认证了!
404 Not found 网络资源不存在
认证:用户登陆,让系统获取到用户信息
授权:给与登陆的当前登陆的用户授予访问不同资源的权限
原理是基于:Spring AOP思想,基于servlet过滤器实现的安全框架。在不修改代码的情况下,对代码进行增强
什么是CSRF
跨站伪造请求,相关病毒获取Cookie的所有信息,就可以代替原有登陆成功的用户发送请求
Spring Security默认是开启的,同时CSRF不会拦截GET、HEAD、OPTION、TRACE 4种,请求,可以查看 https://www.cnblogs.com/dalianpai/p/12393133.html
项目Context-Path下/login是认证 ,/logout是退出认证
@PathVariable
当输入认证的时候,浏览器就会追加一个Cookie、并且在Header中追加Authorization,但决定能够通过认证的是Cookie,认证前后Cookie会发生变化!
基于角色认证
还有一个配置时:https://www.cnblogs.com/zimug/p/11870861.html
@Configuration
@EnableWebSecurity
public class SecruityConfig extends WebSecurityConfigurerAdapter {
// 在Spring5中引入很多加密,SpringSerity需要指定密码加密
@Autowired
PasswordEncoder passwordEncoder;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/","index","/css/*","/js/*").permitAll()//放行的资源
.antMatchers("/api/**").hasRole(ApplicationUserRole.STUDENT.name())//让Studnet账号访问/api/**
.anyRequest()
.authenticated()
.and()
.httpBasic();
//super.configure(http);
// 如果需要指定访问其他资源,请指定下面内容
http.formLogin();
}
@Override
@Bean
protected UserDetailsService userDetailsService() {
/**
* 构建一个用户账号admin,admin 作为ADMIN权限
*/
UserDetails userDetails1 = User.builder()
.username("admin")
.password(passwordEncoder.encode("admin"))
.roles(ApplicationUserRole.ADMIN.name()) //标记为Student权限
.build();
/**
* 构建一个用户账号student,student 作为STUDENT权限
*/
UserDetails userDetails2 = User.builder()
.username("student")
.password(passwordEncoder.encode("student"))
.roles(ApplicationUserRole.STUDENT.name()) //标记为Student权限
.build();
return new InMemoryUserDetailsManager(
userDetails1,userDetails2);
//return super.userDetailsService();
}
}
基于权限认证
登陆请求的处理地址,
退出的url,
然后退出成功后跳转的URL地址
同时认证页面必须是post请求
remember-me 需要表单提交的时候,指定一个input checkbox 名为 remember-me 值为 true、on、yes或者1 都行
指定remember-me过期时间,登陆时勾选 会自动添加cookie到前端
如果想自定义数据库的账号,进行授权认证
1、继承一个UserDetailsService类,重写其方法,此方法返回null 则判定授权失败!构造参数可以鉴别账号是否封停、密码泄露、是否锁定等,请使用最全的构造方法,实现认证
2、去数据库查询账号密码,密码对了,再去封装参数对象,添加进去,然后在封装认证的信息,返回回去
3、数据库的密码必须进行加密。因为SpringSecurity 加密是动态加盐加密,所以每次加密的密码输出结果不一样,就无法通过暴力字典查出密码了
SpringIOC 是核心监听父容器 SpringMVC加载的IOC子容器
父容容器对象可以被子容器对象访问,但是父容器对象不能访问子容器对象
父容器不可被Http请求,但是子容器可以被Htpp请求 如Controller层
所以,我们追加授权的时候,可以加载Controller 也可在Service访问,推荐写在Service中
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)