Day48_SpringSecurity
文章目录
-
-
-
- 什么是SpringSecurity
- 什么是 Spring Security认证和授权?
- 如何自定义Spring Security的配置?
- 如何实现自定义的用户认证(Authentication)流程?
- 面试题3. 基本身份验证是什么意思?
- 面试题5. Spring Security中的会话管理是什么意思?
- 面试题10. Spring Security中的哈希是什么意思?
- 面试题11. 解释加盐及其用法。
- 面试题12. 什么是密码编码器?
- 面试题15. 什么是 SpEL(Spring 表达式语言)?
- 面试题16. 支持SpEL 的Security注释有哪些。
- 什么是Spring Security的方法级安全性?
- 面试题17. 解释什么是 Spring Security中的身份验证管理器。
- 面试题19. 什么是JWT?
- 面试题20. 什么是Spring Security过滤器链?
- 面试题21. 解释Security过滤器链的工作原理。
- 面试题22. Spring Security的预定义过滤器。
- 面试题6. 安全上下文和安全上下文持有者。
- 面试题23. Spring Security中的委托人是什么意思?
- 面试题27. 顺序在拦截 URL模式中重要吗?如果是,那么我们应该按什么顺序写?
- SpringSecurity的核心组件有哪些
- 问题5:如何配置Spring Security以保护Web应用程序的URL?
- Spring Security如何处理跨站请求伪造(CSRF)攻击?
- 如何禁用或启用CSRF保护?
- Spring Security支持哪些身份验证方式?
- 如何实现记住我功能(Remember Me)?
-
-
什么是SpringSecurity
SpringSecurity能干什么?
Spring Security本质上只是一堆 servlet 过滤器,Spring Security 能够完成用户认证和授权,还能防御一些常见的攻击
(1)用户认证指的是:验证某个用户能否访问该系统。这就像回答问题你是谁?
(2)用户授权指的是:验证某个用户是否有权限执行某个操作。比如某个接口是否运行调用,某个修改操作是否允许。它可以被认为是对用户可以做/读这个的问题的回答?
(3)防御常见攻击:CSRF、HTTP Headers、HTTP Requests
SpringSecurity怎么使用?
①我们需要自己写个类实现UserDetailsService并重写其loadUserByUsername方法,编写查询数据库过程,返回User对象,这个User对象时SpringSecurity框架提供的。这个查数据库的过程肯定得你来写,写完后把查到的数据给到SpringSecurity。
说白了,一个用户为zhangsan登录系统,我们得在UserDetailsService里面查询数据库拿到User对象,然后返回给SpringSecurity,这样SpringSecurity就知道该用户能否登录系统。
②我们需要一个配置类,这个配置类里面配置"登录成功后去哪个页面"、“登录失败去哪个页面”、“哪些路径需要做认证”
@Override
protected void configure(HttpSecurity http) throws Exception {
http.logout()
.logoutUrl("/logout") //登出的地址:表示调用/logout就会登出系统
.logoutSuccessUrl("/test/hello") //表示登出后跳转到的路径
.permitAll(); // 表示"/test/hello"这个地址不进行权限校验
http.formLogin() //自定义自己编写的登录页面
.loginPage("login.html") //设置登录页面是login.html
.loginProcessingUrl("/user/login") //用户在登陆页面输入登录信息后访问的路径是"/user/login",然后SpringSecurity就会帮你跳转到login.html
.defaultSuccessUrl("test/index").permitAll() //登录成功后跳转到的路径,这个地址permitAll()也就是不进行权限校验
.and()
.authorizeRequests().antMatchers("/","/test/hello","/user/login") //设置路径
.permitAll() //表示上面的路径不需要认证
.anyRequest() //表示其它请求路径
.authenticated() //都需要进行身份验证。
.antMatchers("/test/index").hasAuthority("admins") //表示"/test/index"路径需要有"admins"的权限才能访问
.antMatchers("/test/find").hasRole("admins") //表示"/test/find"路径需要有"admins"的这个角色才能访问
.and().csrf().disable(); //关闭csrf保护
}
什么是 Spring Security认证和授权?
(1)用户认证指的是:验证某个用户能否访问该系统。这就像回答问题你是谁?
(2)用户授权指的是:验证某个用户是否有权限执行某个操作。比如某个接口是否运行调用,某个修改操作是否允许。它可以被认为是对用户可以做/读这个的问题的回答?
如何自定义Spring Security的配置?
答案: 可以在SecurityConfigurerAdapter类中覆盖configure()方法自定义的安全配置规则。还可以通过实现UserDetailsService接口来提供自定义的用户详细信息服务。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.logout()
.logoutUrl("/logout") //登出的地址:表示调用/logout就会登出系统
.logoutSuccessUrl("/test/hello") //表示登出后跳转到的路径
.permitAll(); // 表示"/test/hello"这个地址不进行权限校验
http.formLogin() //自定义自己编写的登录页面
.loginPage("login.html") //设置登录页面是login.html
.loginProcessingUrl("/user/login") //用户在登陆页面输入登录信息后访问的路径是"/user/login",然后SpringSecurity就会帮你跳转到login.html
.defaultSuccessUrl("test/index").permitAll() //登录成功后跳转到的路径,这个地址permitAll()也就是不进行权限校验
.and()
.authorizeRequests().antMatchers