Shiro教程(八)Shiro Freemarker标签的使用。

 

Shiro  提供了JSP 的一套JSTL 标签,用于做JSP 页面做权限控制的。可以控制一些按钮和一些超链接,或者一些显示内容。JSP 的下篇文章会讲到,这篇先讲讲 Freemarker  Shiro  标签。

 

引用包:

 
  1. <!-- freemarker + shiro(标签) begin -->
  2. <dependency>
  3. <groupId>net.mingsoft</groupId>
  4. <artifactId>shiro-freemarker-tags</artifactId>
  5. <version>0.1</version>
  6. </dependency>
  7. <!-- freemarker + shiro(标签) begin -->

他不是 shiro  官方提供的。如果不是 Maven  项目,请在下方附件内提取。

Java代码:

 
  1. public class FreeMarkerConfigExtend extends FreeMarkerConfigurer {
  2. @Override
  3. public void afterPropertiesSet() throws IOException, TemplateException {
  4. super.afterPropertiesSet();
  5. Configuration cfg = this.getConfiguration();
  6. cfg.setSharedVariable("shiro", new ShiroTags());//shiro标签
  7. cfg.setNumberFormat("#");//防止页面输出数字,变成2,000
  8. //可以添加很多自己的要传输到页面的[方法、对象、值]
  9. }
  10. }

配置文件:

 
  1. <!-- 配置freeMarker 拓展-->
  2. <bean id="freemarkerConfig"
  3. class="com.sojson.core.freemarker.extend.FreeMarkerConfigExtend">
  4. <property name="templateLoaderPath">
  5. <value>/WEB-INF/ftl/</value>
  6. </property>
  7. <property name="freemarkerVariables">
  8. <map>
  9. <entry key="xml_escape" value-ref="fmXmlEscape" />
  10. <entry key="api" value-ref="api"/>
  11. </map>
  12. </property>
  13. <property name="defaultEncoding">
  14. <value>utf-8</value>
  15. </property>
  16. <property name="freemarkerSettings">
  17. <props><!-- 315360000 -->
  18. <prop key="template_update_delay">0</prop>
  19. <prop key="defaultEncoding">UTF-8</prop>
  20. <prop key="url_escaping_charset">UTF-8</prop>
  21. <prop key="locale">zh_CN</prop>
  22. <prop key="boolean_format">true,false</prop>
  23. <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
  24. <prop key="date_format">yyyy-MM-dd</prop>
  25. <prop key="time_format">HH:mm:ss</prop>
  26. <!-- <prop key="number_format">0.######</prop>-->
  27. <prop key="number_format">#</prop>
  28. <prop key="whitespace_stripping">true</prop>
  29. <prop key="auto_import">
  30. /common/config/top.ftl as _top,
  31. /common/config/left.ftl as _left,
  32. /common/config/html.ftl as _html,
  33. /common/config/bottom.ftl as _footer,
  34. /common/config/menu.ftl as _menu
  35. </prop>
  36. </props>
  37. </property>
  38. </bean>

下面来介绍标签:

 

1.guest(游客)

 

 
  1. <@shiro.guest>
  2. 您当前是游客,<a href="javascript:void(0);" class="dropdown-toggle qqlogin" >登录</a>
  3. </@shiro.guest>

 

2.user(已经登录,或者记住我登录)

 

 
  1. <@shiro.user>
  2. 欢迎[<@shiro.principal/>]登录,<a href="/logout.shtml">退出</a>
  3. </@shiro.user>

 

3.authenticated(已经认证,排除记住我登录的)

 

 
  1. <@shiro.authenticated>
  2. 用户[<@shiro.principal/>]已身份验证通过
  3. </@shiro.authenticated>

 

4.notAuthenticated(和authenticated相反)

 

 
  1. <@shiro.notAuthenticated>
  2. 当前身份未认证(包括记住我登录的)
  3. </@shiro.notAuthenticated>

这个功能主要用途,识别是不是本次操作登录过的,比如支付系统,进入系统可以用记住我的登录信息,但是当要关键操作的时候,需要进行认证识别。

 

5.principal标签,这个要稍微重点讲讲。好多博客都是一下带过。

 

principal标签,取值取的是你登录的时候。在Realm实现类中的如下代码:

 
  1. ....
  2. return new SimpleAuthenticationInfo(user,user.getPswd(), getName());

在new SimpleAuthenticationInfo(第一个参数,....)的第一个参数放的如果是一个username,那么就可以直接用。

 
  1. <!--取到username-->
  2. <@shiro. principal/>

如果第一个参数放的是对象,比如我喜欢放User对象。那么如果要取username字段。

 
  1. <!--需要指定property-->
  2. <@shiro.principal property="username"/>

和Java如下Java代码一致

 
  1. User user = (User)SecurityUtils.getSubject().getPrincipals();
  2. String username = user.getUsername();

 

6.hasRole标签(判断是否拥有这个角色)

 

 
  1. <@shiro.hasRole name="admin">
  2. 用户[<@shiro.principal/>]拥有角色admin<br/>
  3. </@shiro.hasRole>

 

7.hasAnyRoles标签(判断是否拥有这些角色的其中一个)

 

 
  1. <@shiro.hasAnyRoles name="admin,user,member">
  2. 用户[<@shiro.principal/>]拥有角色admin或user或member<br/>
  3. </@shiro.hasAnyRoles>

 

8.lacksRole标签(判断是否不拥有这个角色)

 

 
  1. <@shiro.lacksRole name="admin">
  2. 用户[<@shiro.principal/>]不拥有admin角色
  3. </@shiro.lacksRole>

 

9.hasPermission标签(判断是否有拥有这个权限)

 

 
  1. <@shiro.hasPermission name="user:add">
  2. 用户[<@shiro.principal/>]拥有user:add权限
  3. </@shiro.hasPermission>

 

10.lacksPermission标签(判断是否没有这个权限)

 

 
  1. <@shiro.lacksPermission name="user:add">
  2. 用户[<@shiro.principal/>]不拥有user:add权限
  3. </@shiro.lacksPermission>

 

11.自定义标签。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值