使用Spring Security和Thymeleaf实现访问控制

  • 引入相关依赖
  
   
       org.thymeleaf.extras
       thymeleaf-extras-springsecurity4
       3.0.2.RELEASE
   

   
   
       org.springframework.boot
       spring-boot-starter-security
   

   
   
       org.springframework.boot
       spring-boot-starter-thymeleaf
   
  • 创建自定义WebSecurityConfigurerAdapter并重写configure方法
@EnableWebSecurity
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {

    //拦截请求
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //设置哪些url允许被某种角色访问
        http.authorizeRequests().antMatchers("/").permitAll()
                .antMatchers("/bronze").hasRole("英勇黄铜")
                .antMatchers("/silver").hasRole("不屈白银")
                .antMatchers("/gold").hasRole("荣耀黄金")
                .antMatchers("/platinum").hasRole("华贵铂金")
                .antMatchers("/diamond").hasRole("璀璨钻石")
                .antMatchers("/master").hasRole("超凡大师")
                .antMatchers("/challenger").hasRole("最强王者");

        //启用登录功能,可以使用默认的登录页,这里使用自定义的login.html页面
        http.formLogin().loginPage("/login");

        //启用注销功能,(需要提供一个action为/logout的form)并设置注销后访问的url,这里注销后跳转到首页
        http.logout().logoutSuccessUrl("/");

        //启用rememberMe功能,将用户信息保存在cookie中
        http.rememberMe();
    }

    //授权认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //inMemoryAuthentication表示使用基于内存的验证,还可以使用基于数据库的验证等,使用BCrypt编码对密码进行加密
        //,否则报错java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("bronze")
                .password(new BCryptPasswordEncoder().encode("0110")).roles("英勇黄铜")
                .and().withUser("silver").password(new BCryptPasswordEncoder()
                .encode("0110")).roles("不屈白银").and().withUser("gold")
                .password(new BCryptPasswordEncoder().encode("0110")).roles("荣耀黄金")
                .and().withUser("platinum").password(new BCryptPasswordEncoder()
                .encode("0110")).roles("华贵铂金").and().withUser("diamond")
                .password(new BCryptPasswordEncoder().encode("0110")).roles("璀璨钻石")
                .and().withUser("master").password(new BCryptPasswordEncoder()
                .encode("0110")).roles("超凡大师").and().withUser("challenger")
                .password(new BCryptPasswordEncoder().encode("0110")).roles("最强王者");
    }
}
  • 主页显示



    
    首页



欢迎您,亲爱的召唤师! 请登录

召唤师 ! 您的段位为:

  • 点击领取奖励页面



    
    英勇黄铜





您在本赛季段位为:英勇黄铜

获得皮肤奖励:锈迹斑斑 布里茨

  • 自定义登录页面



    
    登录



测试结果:
  • 首页
    使用Spring Security和Thymeleaf实现访问控制_第1张图片

  • 登录页,点击Remember Me下次访问不需要重新登录
    使用Spring Security和Thymeleaf实现访问控制_第2张图片

  • 登录成功
    使用Spring Security和Thymeleaf实现访问控制_第3张图片

  • 奖励页面
    使用Spring Security和Thymeleaf实现访问控制_第4张图片

你可能感兴趣的:(Spring,Boot,Spring,Security)