目前Freemarker对Shrio的标签还不支持,不过已经有人贡献出来第三方面解决方案,如下:
1、下载shiro-freemarker-tags
GitHub地址:https://github.com/jagregory/shiro-freemarker-tags
可以先看一下他的说明文档,有一个初步的了解。
2、Spring MVC配置
自定义一个ShiroTagFreeMarkerConfigurer继承Spring本身提供的FreeMarkerConfigurer,目的是在FreeMarker的Configuration中添加shiro的配置
public
class
ShiroTagFreeMarkerConfigurer
extends
FreeMarkerConfigurer {
@Override
public
void
afterPropertiesSet()
throws
IOException, TemplateException {
super
.afterPropertiesSet();
this
.getConfiguration().setSharedVariable(
"shiro"
,
new
ShiroTags());
}
}
下面的Spring mvc配置
<bean id=
"freemakerCongfig"
class
=
"com.xxx.web.freemarker.ShiroTagFreeMarkerConfigurer"
><!--这里是你自己定义的ShiroTagFreeMarkerConfigurer类-->
<property name=
"templateLoaderPath"
value=
"/WEB-INF/views/"
/>
<property name=
"freemarkerSettings"
>
<props>
<prop key=
"defaultEncoding"
>UTF-
8
</prop>
<prop key=
"classic_compatible"
>
true
</prop>
</props>
</property>
</bean>
3、使用Shiro Tag
下面具体讲讲标签应用,先列出原先的方式,再列出freemarker的方式,网上例举 比较少
guest标签
验证当前用户是否为“访客”,即未认证(包含未记住)的用户
<shiro:guest>
</shiro:guest>
freemark中: <@shiro.guest>
</@shiro.guest>
user标签
认证通过或已记住的用户
<shiro:user>
</shiro:user>
freemark中:
<@shiro.user>
</@shiro.user>
authenticated标签
已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。
<shiro:authenticated>
</shiro:authenticated>
freemark中:
principal 标签
输出当前用户信息,通常为登录帐号信息
Hello, <shiro:principal property="name"/>
freemarker中:
Hello, <@shiro.principal property="name" />, how are you today?
hasRole标签
验证当前用户是否属于该角色
<shiro:hasRole name="administrator">
Administer the system
</shiro:hasRole>
freemarker中:
<@shiro.hasRole name=”admin”>Hello admin!</@shiro.hasRole>
好了 其他没说的 依次类推
还有一个问题 就是 如果默认用shiro登录后是remember me true的
那么用户登录后 如果此时重启tomcat 那么
<@shiro.principal property="name" />还是有值的
这时候退出按钮的控制应该用:<@shiro.user>
退出
</@shiro.user>
guest标签
验证当前用户是否为“访客”,即未认证(包含未记住)的用户
<shiro:guest>
</shiro:guest>
freemark中: <@shiro.guest>
</@shiro.guest>
user标签
认证通过或已记住的用户
<shiro:user>
</shiro:user>
freemark中:
<@shiro.user>
</@shiro.user>
authenticated标签
已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。
<shiro:authenticated>
</shiro:authenticated>
freemark中:
- <@shiro.authenticated>
- </@shiro.authenticated>
principal 标签
输出当前用户信息,通常为登录帐号信息
Hello, <shiro:principal property="name"/>
freemarker中:
Hello, <@shiro.principal property="name" />, how are you today?
hasRole标签
验证当前用户是否属于该角色
<shiro:hasRole name="administrator">
Administer the system
</shiro:hasRole>
freemarker中:
<@shiro.hasRole name=”admin”>Hello admin!</@shiro.hasRole>
好了 其他没说的 依次类推
还有一个问题 就是 如果默认用shiro登录后是remember me true的
那么用户登录后 如果此时重启tomcat 那么
<@shiro.principal property="name" />还是有值的
这时候退出按钮的控制应该用:<@shiro.user>
退出
</@shiro.user>
转载自:http://skyfar666.iteye.com/blog/2001891