Shiro Freemarker标签的使用

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

开始使用

引用包:

1
2
3
4
5
6
7
<!-- freemarker + shiro(标签) begin -->
<dependency>
<groupId>net.mingsoft</groupId>
<artifactId>shiro-freemarker-tags</artifactId>
<version>0.1</version>
</dependency>
<!-- freemarker + shiro(标签) begin -->
  • 他不是 shiro 官方提供的。如果不是 Maven 项目,请先下载。

Java代码:

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

配置文件:

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

下面来介绍标签:

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

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

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

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

1
2
3
<@shiro.authenticated>  
用户[<@shiro.principal/>]已身份验证通过
</@shiro.authenticated>
  1. notAuthenticated(和authenticated相反)
    1
    2
    3
    <@shiro.notAuthenticated>
    当前身份未认证(包括记住我登录的)
    </@shiro.notAuthenticated>
  • 这个功能主要用途,识别是不是本次操作登录过的,比如支付系统,进入系统可以用记住我的登录信息,但是当要关键操作的时候,需要进行认证识别。
  1. principal标签,这个要稍微重点讲讲。好多博客都是一下带过。
  • principal标签,取值取的是你登录的时候。在Realm实现类中的如下代码:
    return new SimpleAuthenticationInfo(user,user.getPswd(), getName());
  • 在new SimpleAuthenticationInfo(第一个参数,….)的第一个参数放的如果是一个username,那么就可以直接用。 <@shiro. principal/>
    如果第一个参数放的是对象,比如我喜欢放User对象。那么如果要取username字段。 <@shiro.principal property="username"/>
    和Java如下Java代码一致
    1
    2
    User user = (User)SecurityUtils.getSubject().getPrincipals();
    String username = user.getUsername();
  1. hasRole标签(判断是否拥有这个角色)
    1
    2
    3
    <@shiro.hasRole name="admin">  
    用户[<@shiro.principal/>]拥有角色admin<br/>
    </@shiro.hasRole>
  2. hasAnyRoles标签(判断是否拥有这些角色的其中一个)
    1
    2
    3
    <@shiro.hasAnyRoles name="admin,user,member">  
    用户[<@shiro.principal/>]拥有角色admin或user或member<br/>
    </@shiro.hasAnyRoles>
  3. lacksRole标签(判断是否不拥有这个角色)
    1
    2
    3
    <@shiro.lacksRole name="admin">  
    用户[<@shiro.principal/>]不拥有admin角色
    </@shiro.lacksRole>
  4. hasPermission标签(判断是否有拥有这个权限)
    1
    2
    3
    <@shiro.hasPermission name="user:add">  
    用户[<@shiro.principal/>]拥有user:add权限
    </@shiro.hasPermission>
  5. lacksPermission标签(判断是否没有这个权限)
    1
    2
    3
    <@shiro.lacksPermission name="user:add">  
    用户[<@shiro.principal/>]不拥有user:add权限
    </@shiro.lacksPermission>
    11.自定义标签。

资料

http://www.sojson.com/blog/143.html

shiro-freemarker-tags jar: http://mvnrepository.com/artifact/net.mingsoft/shiro-freemarker-tags/0.1

个人微信公众号技术交流QQ群
文章目录
  1. 1. 开始使用
    1. 1.1. 引用包:
    2. 1.2. Java代码:
    3. 1.3. 配置文件:
  2. 2. 下面来介绍标签:
  3. 3. 资料