功能:解决web站点的登录,权限验证,授权等功能
优点:在不影响站点业务代码,可以权限的授权与验证横切到业务中
1、要添加的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!--thymeleaf--> < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-thymeleaf</ artifactId > </ dependency > <!--security 和 thymeleaf 整合包--> < dependency > < groupId >org.thymeleaf.extras</ groupId > < artifactId >thymeleaf-extras-springsecurity5</ artifactId > </ dependency > <!--web--> < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > </ dependency > <!--security--> < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-security</ artifactId > </ dependency > |
2、Security 下授权与验证的简单配置(Security下有登录,注销,记住我等功能,可以快速集成到自己的login页上)
Tis:如果template页中使用了 Frame页,默认是不能访问的,需要添加 http.headers().frameOptions().sameOrigin();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { //授权 @Override protected void configure(HttpSecurity http) throws Exception { //请求授权的规则 http.authorizeRequests() //.antMatchers("/tologin").permitAll() //登录页所有人都可以访问 //.antMatchers("/admin/**").hasRole("admin1") .antMatchers( "/admin/list" ).hasRole( "admin1" ) .antMatchers( "/admin/role" ).hasRole( "admin1" ) .antMatchers( "/admin/cate" ).hasRole( "admin2" ) .antMatchers( "/admin/rule" ).hasRole( "admin2" ); // 项目里面使用了springSecurity spring Security下,X-Frame-Options默认为DENY,非spring Security环境下,X-Frame-Options的默认大多也是DENY,这种情况下,浏览器拒绝当前页面加载任何Frame页面 http.headers().frameOptions().sameOrigin(); //登录页(Security默认有一个登录页) http.formLogin().permitAll() .loginPage( "/tologin" ) //指定自定义的登录页地址 .successForwardUrl( "/admin/index" ) //登录成功跳转地址 .usernameParameter( "username" ).passwordParameter( "password" ); //匹配自定义登录页的name元素名称 // 开启注销功能,跳转到登录页 http.csrf().disable(); //退出失败可能能的原因 http.logout().logoutSuccessUrl( "/tologin" ); //开启记住我功能,cookie 默认保存14天 http.rememberMe() .rememberMeParameter( "remember" ); //匹配自定义登录页的name元素名称 } //认证 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .passwordEncoder( new BCryptPasswordEncoder()) //密码加密方式(有些版本的Security必须要指定) .withUser( "root" ).password( new BCryptPasswordEncoder().encode( "123" )).roles( "admin1" , "admin2" , "admin3" ) .and() .withUser( "yeqiu" ).password( new BCryptPasswordEncoder().encode( "123" )).roles( "admin1" ) .and() .withUser( "admin" ).password( new BCryptPasswordEncoder().encode( "123" )).roles( "admin2" ); } } |
3、Security 和 Thymeleaf 页面整合(添加依赖:thymeleaf-extras-springsecurity)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <!--加入约束--> < html class = "x-admin-sm" xmlns:th = "http://www.thymeleaf.org" xmlns:sec = "http://www.thymeleaf.org/extras/spring-security" > <!-- sec:authorize="isAuthenticated()" 用户是否登录 sec:authorize="hasAnyRole('admin1')" 是否具有某个角色 sec:authentication="name" 当前登录用户 sec:authentication="principal.authorities" 当前用户全部角色 --> < div sec:authorize = "isAuthenticated()" > < h2 >< span sec:authentication = "name" ></ span >,您好 您的身份是 < span sec:authentication = "principal.authorities" ></ span > </ h2 > </ div > < li sec:authorize = "hasRole('admin2')" > < a onclick = "xadmin.add_tab('权限管理','admin/rule')" > < cite >权限管理</ cite > </ a > </ li > |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/201343/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)