springboot+springsecurity+thymeleaf

邮差的信 提交于 2019-12-04 10:24:53

来源:听秦疆老师的课笔记

springsecurity是一个权限管理框架,用来授权,认证,加密等等......类似的工具还有shiro

1.整合

  我用的是springboot2.2.0版本,导入以下依赖。

  spring和security整合包我用的版本是thymeleaf-extras-springsecurity5,  老师用的是thymeleaf-extras-springsecurity4  如果使用thymeleaf-extras-springsecurity4,需要将springboot的版本调低至2.0.9及以下  springboot和springsecurity版本不匹配,会产生thymeleaf和security联合使用不生效问题
 1 <dependencies>
 2 
 3         <dependency>
 4             <groupId>org.springframework.boot</groupId>
 5             <artifactId>spring-boot-starter-thymeleaf</artifactId>
 6         </dependency>
 7 
 8         <dependency>
 9             <groupId>org.springframework.boot</groupId>
10             <artifactId>spring-boot-starter-security</artifactId>
11         </dependency>
12         <!-- thymeleaf和Security整合依赖 -->
13         <dependency>
14             <groupId>org.thymeleaf.extras</groupId>
15             <artifactId>thymeleaf-extras-springsecurity5</artifactId>
16             <version>3.0.3.RELEASE</version>
17         </dependency>
18 
19         <dependency>
20             <groupId>org.springframework.boot</groupId>
21             <artifactId>spring-boot-starter-web</artifactId>
22         </dependency>
23 
24         <dependency>
25             <groupId>org.springframework.boot</groupId>
26             <artifactId>spring-boot-starter-test</artifactId>
27             <scope>test</scope>
28             <exclusions>
29                 <exclusion>
30                     <groupId>org.junit.vintage</groupId>
31                     <artifactId>junit-vintage-engine</artifactId>
32                 </exclusion>
33             </exclusions>
34         </dependency>
35     </dependencies>
View Code

2.配置使用

  使用方式十分简单,用一个类继承WebSecurityConfigurerAdapter并重写方法即可

   不要忘记使用@EnableWebSecurity开启服务,交给spring管理

    

 1 /**
 2  * @author Silent
 3  * @date 2019/11/13 17:12:38
 4  * @description  @EnableWebSecurity 开启服务
 5  * 1.授权
 6  * 2.认证
 7  */
 8 @EnableWebSecurity
 9 public class SecurityConfig extends WebSecurityConfigurerAdapter {
10     /**
11      *
12      * @param http
13      * @throws Exception
14      * 授权:首页所有人可以访问,功能页只有对应有权限的人才能访问
15      */
16     @Override
17     protected void configure(HttpSecurity http) throws Exception {
18         // 请求授权的规则~
19         http.authorizeRequests()
20                 .antMatchers("/").permitAll()
21                 .antMatchers("/level1/**").hasRole("vip1")
22                 .antMatchers("/level2/**").hasRole("vip2")
23                 .antMatchers("/level3/**").hasRole("vip3");
24         // 没有权限默认会到登录页面(security内置的登录页面),需要开启登录页面
25         //定制登录页面loginPage("/toLogin")
26         //默认表单name用户名是username,密码是password,自己定义需要usernameParameter("username").passwordParameter("password")
27         //loginProcessingUrl("/login");参数“login”与登录表单的action保持一致
28         /**
29          * 如果只配置loginPage而不配置loginProcessingUrl的话
30          * 那么loginProcessingUrl默认就是loginPage
31          * 你配置的loginPage("/toLogin") ,那么loginProcessingUrl就是"/toLogin",相应的action也改为“/toLogin”
32          */
33         http.formLogin().loginPage("/toLogin")
34                 .usernameParameter("username").passwordParameter("password")
35                 .loginProcessingUrl("/login");
36         //防止网站攻击 csrf,阻止get,
37         http.csrf().disable();//关闭csrf功能,解决登录失败
38         //开启注销功能,跳到首页
39         http.logout().logoutSuccessUrl("/");
40         //开启记住我功能,cookies默认保存两周,自定义接受前端参数
41         http.rememberMe().rememberMeParameter("remember");
42 
43     }
44 
45     //认证, springboot 2.1.x可以直接使用
46 
47     @Override
48     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
49         //正常的话,这些数据应该从数据库读取 这里写入内存
50         auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
51                 .withUser("silent").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
52                 .and()
53                 .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
54                 .and()
55                 .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
56     }
57 
58 }

3.在thymeleaf中使用springsecurity

  sec:authorize :判断信息是否存在

    sec:authentication:取出相应的值

  1 <!DOCTYPE html>
  2 <html lang="en" xmlns:th="http://www.thymeleaf.org"
  3       xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
  4 <head>
  5     <meta charset="UTF-8">
  6     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  7     <title>首页</title>
  8     <!--semantic-ui-->
  9     <link href="https://cdn.bootcss.com/semantic-ui/2.4.1/semantic.min.css" rel="stylesheet">
 10     <link th:href="@{/qinjiang/css/qinstyle.css}" rel="stylesheet">
 11 </head>
 12 <body>
 13 
 14 <!--主容器-->
 15 <div class="ui container">
 16 
 17     <div class="ui segment" id="index-header-nav" th:fragment="nav-menu">
 18         <div class="ui secondary menu">
 19             <a class="item"  th:href="@{/index}">首页</a>
 20 
 21             <!--登录注销-->
 22             <div class="right menu">
 23                 <!--未登录-->
 24                 <div sec:authorize="!isAuthenticated()">
 25                     <a class="item" th:href="@{/toLogin}" >
 26                         <i class="address card icon"></i> 登录
 27 
 28                     </a>
 29                 </div>
 30                 <!--已登录 -->
 31                 <div sec:authorize="isAuthenticated()">
 32                     <a class="item">
 33                         用户名:<span sec:authentication="name"></span>
 34                         角色: <span sec:authentication="principal.authorities"></span>
 35                     </a>
 36                 </div>
 37                 <div sec:authorize="isAuthenticated()">
 38                     <a class="item" th:href="@{/logout}" >
 39                         <i class="sign-out icon"></i> 注销
 40                     </a>
 41                 </div>
 42 
 43             </div>
 44         </div>
 45     </div>
 46 
 47     <div class="ui segment" style="text-align: center">
 48         <h3>Spring Security Study by 秦疆</h3>
 49     </div>
 50 
 51     <div>
 52         <br>
 53         <div class="ui three column stackable grid">
 54             <div class="column"  sec:authorize="hasRole('vip1')">
 55                 <div class="ui raised segment">
 56                     <div class="ui">
 57                         <div class="content">
 58                             <h5 class="content">Level 1</h5>
 59                             <hr>
 60                             <div><a th:href="@{/level1/1}"><i class="bullhorn icon"></i> Level-1-1</a></div>
 61                             <div><a th:href="@{/level1/2}"><i class="bullhorn icon"></i> Level-1-2</a></div>
 62                             <div><a th:href="@{/level1/3}"><i class="bullhorn icon"></i> Level-1-3</a></div>
 63                         </div>
 64                     </div>
 65                 </div>
 66             </div>
 67 
 68             <div class="column"  sec:authorize="hasRole('vip2')">
 69                 <div class="ui raised segment">
 70                     <div class="ui">
 71                         <div class="content">
 72                             <h5 class="content">Level 2</h5>
 73                             <hr>
 74                             <div><a th:href="@{/level2/1}"><i class="bullhorn icon"></i> Level-2-1</a></div>
 75                             <div><a th:href="@{/level2/2}"><i class="bullhorn icon"></i> Level-2-2</a></div>
 76                             <div><a th:href="@{/level2/3}"><i class="bullhorn icon"></i> Level-2-3</a></div>
 77                         </div>
 78                     </div>
 79                 </div>
 80             </div>
 81 
 82             <div class="column"  sec:authorize="hasRole('vip3')">
 83                 <div class="ui raised segment">
 84                     <div class="ui">
 85                         <div class="content">
 86                             <h5 class="content">Level 3</h5>
 87                             <hr>
 88                             <div><a th:href="@{/level3/1}"><i class="bullhorn icon"></i> Level-3-1</a></div>
 89                             <div><a th:href="@{/level3/2}"><i class="bullhorn icon"></i> Level-3-2</a></div>
 90                             <div><a th:href="@{/level3/3}"><i class="bullhorn icon"></i> Level-3-3</a></div>
 91                         </div>
 92                     </div>
 93                 </div>
 94             </div>
 95 
 96         </div>
 97     </div>
 98     
 99 </div>
100 
101 
102 <script th:src="@{/qinjiang/js/jquery-3.1.1.min.js}"></script>
103 <script th:src="@{/qinjiang/js/semantic.min.js}"></script>
104 
105 </body>
106 </html>
View Code

 

 https://github.com/Sevenwsq/springsecurity-demo/tree/springsecurity-demo 项目地址

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!