thymeleaf模板引擎中私用shiro标签

1、在工程中引入对应包信息

下面的包为thymeleaf中使用shiro的包,如果你的项目需要使用其他包,自信导入,如shiro的包等。

<dependency>

    <groupId>com.github.theborakompanioni</groupId>

    <artifactId>thymeleaf-extras-shiro</artifactId>

    <version>${thymeleaf-shiro.version}</version>

</dependency>

2、创建shiro配置类Shiroconfig

重点说明:需要引入shiro的方言配置,否则shiro标签在thymeleaf中会失效

解决问题:解决shiro标签在thymeleaf中无效问题

@Configuration
public class ShiroConfig {
    /**
     *  开启shiro aop 注解支持. 否则注解不生效
     *  使用代理方式;所以需要开启代码支持;
     * @return
     */
    @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
        return new LifecycleBeanPostProcessor();
    }
    @Bean
    @DependsOn({"lifecycleBeanPostProcessor"})
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        advisorAutoProxyCreator.setProxyTargetClass(true);
        return advisorAutoProxyCreator;
    }

    //ShiroFilter过滤所有请求
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
        System.out.println("==============执行shiro自定义filter===============");
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        //给ShiroFilter配置安全管理器
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        //配置系统受限资源
        //配置系统公共资源
        Map<String, String> map = new HashMap<String, String>();
        //map.put("/user/login","anon");//表示这个为公共资源 一定是在受限资源上面
        //map.put("/**","authc");//表示这个受限资源需要认证和授权
        // 设置认证界面路径
        //shiroFilterFactoryBean.setLoginUrl("/login.html");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
        return shiroFilterFactoryBean;
    }
    //创建安全管理器
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm) {
        System.out.println("============加载安全管理器===============");
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(realm);
        return securityManager;
    }
    //创建自定义Realm
    @Bean
    public Realm getRealm() {
        System.out.println("==============加载自定义realm===============");
        return new LoginRealm();
    }

    //加方言,否则shiro在html标签不生效
    @Bean(name = "shiroDialect")
    public ShiroDialect shiroDialect(){
        return new ShiroDialect();
    }
}

3、shiro标签简介

用于 Apache Shiro 的 JSP/GSP 标签库

<shiro:guest/>
仅当系统不知道当前主题时,才会显示正文内容,因为他们尚未登录或没有相应的“记住我”身份。 它在逻辑上与“用户”标签相反。

<shiro:user/>
仅当当前主体具有已知身份(来自以前的登录或“RememberMe”服务)时,才显示正文内容。 请注意,这在语义上与“经过身份验证”标记不同,后者更具限制性。 它在逻辑上与“guest”标签相反。

<shiro:principal/>
显示用户的主体或用户主体的属性。

<shiro:hasPermission/>
仅当当前主体(用户)“具有”(暗示)指定权限(即用户具有指定能力)时才显示正文内容。

<shiro:lacksPermission/>
仅当当前主体(用户)没有(不暗示)指定权限(即用户缺乏指定的能力)时才显示正文内容。

<shiro:hasRole/>
仅当当前用户具有指定角色时才显示正文内容。

<shiro:lacksRole/>
仅当当前用户没有指定角色(即他们明确缺少指定角色)时才显示正文内容。

<shiro:hasAnyRoles/>
仅当当前用户具有逗号分隔的角色名称列表中的指定角色之一时,才显示正文内容。

<shiro:已验证/>
仅当当前用户在其当前会话期间成功进行身份验证时,才显示正文内容。 它比“用户”标签更具限制性。 它在逻辑上与“未认证”标签相反。

<shiro:notAuthenticated/>
仅当当前用户在其当前会话期间未成功进行身份验证时,才显示正文内容。 它在逻辑上与“经过身份验证”的标签相反。

4、在页面中使用shiro标签

shiro:hasAllRoles="2001":如果有2001这个角色就显示李

shiro:hasPermission="goods:findgoods":如果有goods:findgoods权限就显示li

重点说明,shiro标签在thymeleaf中直接作为标签的一个属性使用即可。

<!DOCTYPE html>
<html xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
  <head>
    <title>thymeleaf-extras-shiro</title>
  </head>
  <body>
    <p shiro:guest="">Please <a href="login.html">login</a></p>
    <p shiro:authenticated="">
      Hello, <span shiro:principal=""></span>, how are you today?
</p>
<li shiro:hasAllRoles="2001">商品管理
    <ul>
        <li  shiro:hasPermission="goods:findgoods"> 查看商品信息</li>
        <li  shiro:hasPermission="goods:deleteuser">删除商品信息</li>
    </ul>
</li>
  </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾林小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值