一,**需求:
**用户没有登录的时候,导航栏上只显示登录按钮,用户登录之后,导航栏可以显示登录的用户信息及注销按钮!还有就是,比如admin这个用户,它只有 vip2,vip3功能,那么登录则只显示这两个功能,而vip1的功能菜单不显示!
二,实现
1,导入依赖
XML
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
2,导入命名空间
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
3,修改index页面
html
<div>
<!--如果未登录则显示以下内容-->
<div sec:authorize="!isAuthenticated()">
<a class="btn btn-primary" th:href="@{/toLogin}">登陆</a>
</div>
<!--如果已登录则显示以下内容-->
<div sec:authorize="isAuthenticated()">
用户名<p sec:authentication="name"></p>
角色<p sec:authentication="principal.authorities"></p>
<a class="btn btn-primary" th:href="@{/logout}">注销</a>
</div>
</div>
<!--如果用户拥有这个角色,则显示该div内的内容,如果没有则不显示-->
<div class="div" sec:authorize="hasRole('vip1')">
<a th:href="@{/level1/1}">level1-1</a><br/>
<a th:href="@{/level1/2}">level1-2</a>
</div>
<div class="div" sec:authorize="hasRole('vip2')">
<a th:href="@{/level2/1}">level2-1</a><br/>
<a th:href="@{/level2/2}">level2-2</a>
</div>
<div class="div" sec:authorize="hasRole('vip3')">
<a th:href="@{/level3/1}">level3-1</a><br/>
<a th:href="@{/level3/2}">level3-2</a>
</div>
4,Security配置
java
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.formLogin() // 使用表单登录
.loginPage("/login") // 指定登录页面
.and()
.logout() // 配置注销
.logoutUrl("/logout") // 注销路径
.logoutSuccessUrl("/login?logout") // 注销成功后跳转的页面
.and()
.csrf().disable();//关闭csrf功能
}