zoukankan      html  css  js  c++  java
  • Freemarker-shiro的标签

    一、引入依赖(已解决版本冲突)
    复制代码
    <!-- shiro-freemarker-tags start -->
    <dependency>
        <groupId>net.mingsoft</groupId>
        <artifactId>shiro-freemarker-tags</artifactId>
        <version>1.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-all</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- shiro-freemarker-tags end -->
    
    <!-- freemarker start -->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.28</version>
    </dependency>
    <!-- freemarker end -->
    
    <!-- shiro begin -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-all</artifactId>
        <version>1.4.0</version>
    </dependency>
    <!-- shiro end -->
    复制代码
    二、配置
    Java代码:
    
    复制代码
    public class FreeMarkerConfigExtend extends FreeMarkerConfigurer {
        @Override
        public void afterPropertiesSet() throws IOException, TemplateException {
            super.afterPropertiesSet();
            Configuration cfg = this.getConfiguration();
            // 添加shiro标签
            cfg.setSharedVariable("shiro", new ShiroTags());
        }
    }
    复制代码
    复制代码
    <!-- freemarker环境配置 -->
    <bean id="freemarkerConfig" class="com.demo.shiro.common.freemarker.FreeMarkerConfigExtend">
        <!-- 模版位置,这里配置了下面就不用配了 -->
        <property name="templateLoaderPath" value="/WEB-INF/views" />
        <property name="freemarkerSettings"><!-- 一些设置 -->
            <props>
                <prop key="template_update_delay">0</prop>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="boolean_format">true,false</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="time_format">HH:mm:ss</prop>
                <prop key="number_format">0.##########</prop>
                <prop key="classic_compatible">true</prop>
                <prop key="template_exception_handler">ignore</prop>
                <prop key="auto_import">
                    <!-- 自动装载,引入Freemarker,用于Freemarker Macro引入 -->
                    /common/_meta.ftl as _meta,
                    /common/_footer.ftl as _footer
                    <!--/common/menu.ftl as _menu-->
                </prop>
            </props>
        </property>
    </bean>
    复制代码
    三、shiro标签详解
    1. guest(游客)
    
    <@shiro.guest>  
        您当前是游客,<a href="javascript:void(0);">登录</a>
    </@shiro.guest> 
    2. user(已经登录,或者记住我登录)
    
    <@shiro.user>  
        欢迎[<@shiro.principal/>]登录,<a href="/logout.shtml">退出</a>  
    </@shiro.user>   
    3. authenticated(已经认证,排除记住我登录的)
    
    <@shiro.authenticated>  
        用户[<@shiro.principal/>]已身份验证通过  
    </@shiro.authenticated> 
    4. notAuthenticated(和authenticated相反)
    
    <@shiro.notAuthenticated>
        当前身份未认证(包括记住我登录的)
    </@shiro.notAuthenticated> 
    该功能主要用途:识别是不是本次操作登录过的,比如支付系统,进入系统可以用记住我的登录信息,但是当要关键操作的时候,需要进行认证识别。
    
    5. principal标签
    
    principal标签,取值取的是你登录的时候。在Realm实现类中的如下代码:
    
    ...
    return new SimpleAuthenticationInfo(user,user.getPswd(), getName());
    在 new SimpleAuthenticationInfo(第一个参数,....) 的第一个参数放的如果是一个username,那么就可以直接用。
    
    <!--取到username-->
    <@shiro. principal/>
    如果第一个参数放的是对象,比如放User对象。那么如果要取username字段。
    
    <!--需要指定property-->
    <@shiro.principal property="username"/>
    和Java如下Java代码一致
    
    User user = (User) SecurityUtils.getSubject().getPrincipals();
    String username = user.getUsername();
    6. hasRole标签(判断是否拥有这个角色)
    
    <@shiro.hasRole name="admin">  
        用户[<@shiro.principal/>]拥有角色admin<br/>  
    </@shiro.hasRole>   
    7. hasAnyRoles标签(判断是否拥有这些角色的其中一个)
    
    <@shiro.hasAnyRoles name="admin,user,member">  
        用户[<@shiro.principal/>]拥有角色admin或user或member<br/>  
    </@shiro.hasAnyRoles>   
    8. lacksRole标签(判断是否不拥有这个角色)
    
    <@shiro.lacksRole name="admin">  
        用户[<@shiro.principal/>]不拥有admin角色
    </@shiro.lacksRole>   
    9. hasPermission标签(判断是否有拥有这个权限)
    
    <@shiro.hasPermission name="user/add">  
        用户[<@shiro.principal/>]拥有user/add权限
    </@shiro.hasPermission>   
    10. lacksPermission标签(判断是否没有这个权限)
    
    <@shiro.lacksPermission name="user/add">  
        用户[<@shiro.principal/>]不拥有user/add权限
    </@shiro.lacksPermission> 
    

      

  • 相关阅读:
    CentOS7 mysql5.7安装并配置主主同步
    CentOS7 jdk安装
    CentOS7 zabbix安装并实现其它服务器服务监控报警与自动恢复
    CentOS7 SkyWalking APM8.1.0 搭建与项目集成使用
    Centos7 搭建DNS服务器
    mybatis中collection association优化使用及多参数传递
    mysql常用配置注意项与sql优化
    Spring webFlux:坐等spring-boot-starter-data-mysql-reactive
    ElasticSearch 工具类封装(基于ElasticsearchTemplate)
    接口配置有效管理(获取配置文件内容3种常见方式)
  • 原文地址:https://www.cnblogs.com/joelan0927/p/11374189.html
Copyright © 2011-2022 走看看