springsecurity-权限控制

一,**需求:

**用户没有登录的时候,导航栏上只显示登录按钮,用户登录之后,导航栏可以显示登录的用户信息及注销按钮!还有就是,比如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功能


    }
相关推荐
逊嘘1 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
morris1319 分钟前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
monkey_meng26 分钟前
【Rust中的迭代器】
开发语言·后端·rust
余衫马29 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng32 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
七星静香33 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员34 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU35 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie638 分钟前
在IDEA中使用Git
java·git
Elaine2023911 小时前
06 网络编程基础
java·网络