上一篇 : 3. MD5和Salt

下一篇 : 5. 授权

1. 环境搭建

  1. 页面、数据库、后端代码和之前一样

  2. 引入一个 Shiro 和 Thymeleaf 整合的依赖

    <!-- https://mvnrepository.com/artifact/com.github.theborakompanioni/thymeleaf-extras-shiro -->
    <dependency>
        <groupId>com.github.theborakompanioni</groupId>
        <artifactId>thymeleaf-extras-shiro</artifactId>
        <version>2.0.0</version>
    </dependency>
    
  3. 在所有页面中引入 Shiro 和 thymeleaf 的支持

    <html lang="en" xmlns:th="http://www.thymeleaf.org"
          xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
    

2. 使用

<--! guest标签,用户没有身份验证时显示相应信息,即游客访问信息。-->
  <shiro:guest>
  </shiro:guest>
<--! user标签,用户已经身份验证/记住我登录后显示相应的信息。-->
  <shiro:user>  
  </shiro:user>
  

<--! authenticated标签,用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。
 -->
  <shiro:authenticated>  
  </shiro:authenticated>
  
<--! notAuthenticated标签,用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。 -->
  <shiro:notAuthenticated>
  
  </shiro:notAuthenticated>
  

<--! principal标签,相当于((User)Subject.getPrincipals()).getUsername()。 -->
  <shiro: principal/>
  
  <shiro:principal property="username"/>
  

<--! lacksPermission标签,如果当前Subject没有权限将显示body体内容。 -->
  <shiro:lacksPermission name="org:create">
 
  </shiro:lacksPermission>
  

<--! hasRole标签,如果当前Subject有角色将显示body体内容。
 -->
  <shiro:hasRole name="admin">  
  </shiro:hasRole>
<--!  方法2 -->
<div shiro:hasRole="admin">
</div>
  
<--! hasAnyRoles标签,如果当前Subject有任意一个角色(或的关系)将显示body体内容。 -->
  <shiro:hasAnyRoles name="admin,user">
   
  </shiro:hasAnyRoles>
<--! 方法2 -->
<div shiro:hasAnyRoles="admin">
</div>

<--! lacksRole标签,如果当前Subject没有角色将显示body体内容。 -->
  <shiro:lacksRole name="abc">  
  </shiro:lacksRole>
  

<--! hasPermission标签:是否   如果当前Subject有权限将显示body体内容 -->
  <shiro:hasPermission name="user:create">  
  </shiro:hasPermission>

3. 方言配置

如果依赖和支持的标签都导入了,Shiro 标签还是不生效
就需要在 Shiro 的配置文件中加上方言配置

// Shiro 在 html 页面上方言配置
    
    @Bean(name="shiroDialect")
    public ShiroDialect shiroDialect(){
        return new ShiroDialect();
    }
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐