一,**需求:
**用户没有登录的时候,导航栏上只显示登录按钮,用户登录之后,导航栏可以显示登录的用户信息及注销按钮!还有就是,比如admin这个用户,它只有 vip2,vip3功能,那么登录则只显示这两个功能,而vip1的功能菜单不显示!
二,实现
1,导入依赖
<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页面
<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配置
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().and().formLogin() // 使用表单登录.loginPage("/login") // 指定登录页面.and().logout() // 配置注销.logoutUrl("/logout") // 注销路径.logoutSuccessUrl("/login?logout") // 注销成功后跳转的页面.and().csrf().disable();//关闭csrf功能}