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>   

    原文地址:https://www.sojson.com/blog/143.html

  • 相关阅读:
    处理键盘弹出
    纯手码自动布局
    ios 随机色 宏定义
    linux下自定义pid实现任意数据采集
    http://blog.chinaunix.net/uid-9845710-id-1996675.html snmpd配置
    http://www.360doc.com/content/10/0928/12/11991_57014502.shtml
    pingall脚本
    http://lihuipeng.blog.51cto.com/3064864/643960
    elf 文件
    php中获取周几的方法
  • 原文地址:https://www.cnblogs.com/Jimc/p/10031094.html
Copyright © 2011-2022 走看看