简介
SpringSecurity是一个专注于为Java应用程序提供身份认证和授权的框架,它的强大之处在于它可以轻松扩展以满足自定义的需求
特征
- 对身份的认证和授权提供全面的、可扩展的支持
- 防止各种攻击,如会话固定攻击、点击劫持、csrf攻击等
- 支持与Servlet API、Spring MVC等Web技术集成
用户权限管理
User实体类实现UserDetails接口
- isAccountNonExpired()方法:返回true,账号未过期
- isAccountNonLocked()方法:返回true,账号未锁定
- isCredentialsNonExpired()方法:返回true,凭证未过期
- isEnabled()方法:返回true,账号可用
- getAuthorities()方法:返回用户的权限集合,权限实现GrantedAuthority接口
UserService实现UserDetailsService接口
- loudUserByUsername()方法:通过用户名查找用户
SecurityConfig配置类,要求继承于WebSecurityConfigurerAdapter类
configure(WebSecurity web)方法
- web.ignoring(),antMatchers(“资源路径”):忽略静态资源访问
configure(AuthenticationManagerBuilder auth)方法
- AuthenticationManager:认证核心接口
- AuthenticationManagerBuilder:用于构建AuthenticationManager实例
- ProviderManager:AuthenticationManager接口的默认实现类
- AuthenticationProvider:每个ProviderManager持有一组AuthenticationProvider,每个AuthenticationProvider负责一种认证(委托模式)
- Aythentication:用于封装认证信息的接口,不同实现类代表不同认证信息
- 内置认证规则:auth.userDetailsService(xxxService).passwordEncoder(内置密码加密方式);
- 自定义认证规则:auth.authenticationProvider(new AuthenticationProvider()),实现 AuthenticationProvider的接口
- authenticate()方法:实现认证逻辑,reutrn UsernamePasswordAuthenticationToken(user, user.getPassword(), user.getAuthorities()),信息、证书、权限
- supports()方法:返回当前接口支持哪种认证类型,例如return UsernamePasswordAuthenticationToken.class.equals(aClass)。UsernamePasswordAuthenticationToken:Aythentication常用实现类,代表账号密码认证
configure(HttpSecurity http)方法,登陆相关配置
http.formLogin().loginPage()
.loginProcessingUrl()
.successHandler(new AuthenticationSuccessHandler())
.failureHandler(new AuthenticationFailureHandler())
退出相关配置:
http.logout().logoutUrl().logoutSuccessHandler()
- 授权配置
http.authorizeRequests()
.antMatchers(“路径”).hasAnyAuthority(权限,权限)
.and().exceptionHandling().accessDeniedPage(“权限不足页面”)
- 增加Filter,处理验证码
http.addFilterBefore(new Filter())
- 记住我功能
http.rememberMe()