0%

SpringSecurity入门

简介

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()

------ THEEND ------

欢迎关注我的其它发布渠道