/**
* 自定义一个ShiroTagFreeMarkerConfigurer继承Spring本身提供的FreeMarkerConfigurer,目的是在FreeMarker的Configuration中添加shiro的配置
* @author q
*
*/
public class ShiroTagFreeMarkerConfigurer extends FreeMarkerConfigurer{
@Override
public void afterPropertiesSet() throws IOException, TemplateException {
super.afterPropertiesSet();
this.getConfiguration().setSharedVariable("shiro", new ShiroTags());
}
修改freemarker在spring配置文件中的配置
<!-- 配置freeMarker的模板路径 -->
<!-- <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> -->
<bean id="freemarkerConfig" class="com.ws.config.web.freemarker.ShiroTagFreeMarkerConfigurer">
<!-- 用自定义的类 替代原生类-->
<property name="templateLoaderPath">
<value>/WEB-INF/ftl/</value>
</property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="defaultEncoding">
<value>utf-8</value>
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">5</prop> <!--检查模板是否更新 秒 -->
</props>
</property>
</bean>
下面具体讲讲标签应用,先列出原先的方式,再列出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中:
<@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>
对于必须authc的操作 必须
重新登录 因为此时 的用户只是读取的 remember me(个人理解)
并没有通过认证,因为tomcat重启过了
不知道大家有没有遇到过该情况 可以 研究探讨下