SpringSecurity总结

SpringSecurity

Spring Security简介

解决的两个核心问题:认证和授权
默认存在IOC AOP
基于配置(配置类中配置权限基本操作)

SpringSecurity自定义登录

1.API对象

UserDetailsService:loadUserByUserName
UserDetails(登录用户信息):用户名、密码、权限
PasswordEncoder:encode、matches

2.自定义登录前后端

  • 后端:

1.实现UserDetailsService接口:需要自定义逻辑时,需要实现 UserDetailsService 接口
2.PasswordEncoder 密码解析器,其中BCryptPasswordEncoder 是 Spring Security 官方推荐的密码解析器
自定义表单配置。

  • 自定义表单配置:

1.SecurityConfig 配置类 继承 WebSecurityConfigureAdaptor 重写configure(http)
2.configure 方法中加入自定义表单配置

  • 其他配置

1.自定义登录表单参数:usernameParameters()、passwordParameter()【form表单name 与自定义表单参数名一致】
2.error.html

3.访问URL匹配

配置类中http.authorizeRequests() 主要是对url进行控制,也就是我们所说的授权(访问控制)。http.authorizeRequests() 也支持连缀写法

anyRequest():表示匹配所有的请求
antMatcher():参数是不定向参数,每个参数是一个 ant 表达式,用于匹配URL规则。
regexMatchers():使用正则表达式进行匹配。
mvcMatchers():适用于配置了 servletPath 的情况

4.内置访问控制方法

Spring Security 匹配了 URL 后调用了 permitAll() 表示不需要认证,随意访问。在 Spring
Security 中提供了多种内置控制。

.antMatchers("/yjxxt/demo").permitAll()

这里是引用permitAll()表示所匹配的 URL 任何人都允许访问。
authenticated()表示所匹配的 URL 都需要被认证才能访问。
anonymous()表示可以匿名访问匹配的URL。和permitAll()效果类似,只是设置为anonymous()的 url 会执行 filter 链中
denyAll()表示所匹配的 URL 都不允许被访问。
被“remember me”的用户允许访问
如果用户不是被 remember me 的,才可以访问

5.角色权限判断

其他的权限控制

.antMatchers("/main1.html").hasAuthority("admin")

hasAuthority(String)判断用户是否具有特定的权限
hasAnyAuthority(String …)如果用户具备给定权限中某一个,就允许访问。
hasRole(String)如果用户具备给定角色就允许访问。否则出现 403。
hasAnyRole(String …)如果用户具备给定角色的任意一个,就允许被访问
hasIpAddress(String)如果请求是指定的 IP 就运行访问。

6.403 没有权限处理(实现AccessDenyHandler 接口)

其他SpringSecurity知识

1.基于表达式的访问控制

access()方法使用:可以通过 access() 实现和之前学习的权限控制完成相同的功能。可以使用自定义方法。

2.基于注解的访问控制

在 Spring Security 中提供了一些访问控制的注解。这些注解都是默认是都不可用的,需要通过
@EnableGlobalMethodSecurity 进行开启后使用。

  • @Secured 是专门用于判断是否具有角色的。能写在方法或类上。参数要以 ROLE_开头。
  • @PreAuthorize/@PostAuthorize:在执行前后判断权限

3.RememberMe功能实现

Spring Security 中 Remember Me 为“记住我”功能,用户只需要在登录时添加 rememberme复选框,取值为true。Spring Security 会自动把用户信息存储到数据源中,以后就可以不登录进行访问

4.Thymeleaf中SpringSecurity的使用(视图技术)

5.退出登录

6.SpringSecurity中的CSRF

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“OneClick Attack” 或者Session Riding。通过伪造用户请求访问受信任站点的非法请求访问。

从 Spring Security4开始CSRF防护默认开启。默认会拦截请求。进行CSRF处理。CSRF为了保
证不是其他第三方网站访问,要求访问时携带参数名为 _csrf 值为token(token 在服务端产生)
的内容,如果token和服务端的token匹配成功,则正常访问。

你可能感兴趣的:(Java高级,java)