博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freemarker集成shiro标签
阅读量:6917 次
发布时间:2019-06-27

本文共 4367 字,大约阅读时间需要 14 分钟。

hot3.png

freemarker集成shiro标签 博客分类: java
最近在做权限控制的时候用到了shiro,可惜一窍不通,学了一段时间之后,在freemarker装饰器中集成shiro标签时遇到了一点问题,网上资料都是在普通页面实现,特此记录下,如有理解不对的地方还请各位指正。
1、需要引入jar包,或者到github上下载源码打包使用:
 
2、集成freemarker的配置类FreeMarkerConfigurer,重写afterPropertiesSet()方法:如下
import com.jagregory.shiro.freemarker.ShiroTags; import freemarker.template.TemplateException; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import java.io.IOException; /**  * 继承FreeMarkerConfigurer类,重写afterPropertiesSet()方法;  * 集成shiroTags标签  * Created by zsc on 2016/1/5.  */ public class ShiroTagFreeMarkerConfigurer extends FreeMarkerConfigurer {
@Override public void afterPropertiesSet() throws IOException, TemplateException {
super.afterPropertiesSet(); this.getConfiguration().setSharedVariable("shiro", new ShiroTags()); } }
3、修改freemarker的xml配置文件:把freemarkerConfig bean的class指向自定义的ShiroTagFreeMarkerConfigurer,如下
0
utf-8
\#0.\#\#\#\#\#
yyyy-MM-dd HH:mm:ss
true
ignore
4、包含以下标签
    guest标签:验证当前用户是否为“访客”,即未认证(包含未记住)的用户;
shiro标签:<shiro:guest>
</shiro:guest>  ;
freemark中: <@shiro.guest>  
</@shiro.guest> 
    user标签:认证通过或已记住的用户 shiro标签:<shiro:user> </shiro:user>  ;freemark中: <@shiro.user> </@shiro.user> 
    
authenticated标签:已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。 shiro标签:
<shiro:authenticated> 
</shiro:authenticated>;
freemark中: 
<@shiro.authenticated>
</@shiro.authenticated>
    notAuthenticated标签:未认证通过的用户。与authenticated标签相对。 shiro标签:<shiro:notAuthenticated> </shiro:notAuthenticated>;freemark中: <@shiro.notAuthenticated></@shiro.notAuthenticated>
    
principal标签
输出当前用户信息,通常为登录帐号信息  shiro标签:
Hello,  <@shiro.principal property="name" />  ;
freemarker中: 
 Hello,  <@shiro.principal property="name" />, how are you today?     
    
hasRole标签
:验证当前用户是否属于该角色 ,shiro标签:
 <shiro:hasRole name="administrator"> 
 Administer the system 
</shiro:hasRole> ;
freemarker中:
<@shiro.hasRole name=”admin”>Hello admin!</@shiro.hasRole> 
    
hasAnyRoles标签
验证当前用户是否属于这些角色中的任何一个,角色之间逗号分隔 ,shiro标签:
 <shiro:hasAnyRoles name="admin,user,operator"> 
 Administer the system 
</shiro:hasAnyRoles> ;
freemarker中:
<@shiro.hasAnyRoles name="admin,user,operator">Hello admin!</@shiro.hasAnyRoles>
    
hasPermission标签
验证当前用户是否拥有该权限 ,shiro标签:
 <shiro:hasPermission name="/order:*"> 
 订单 
</shiro:hasPermission> ;
freemarker中:
<@shiro.hasPermission name="/order:*">订单/@shiro.hasPermission> 
    
lacksRole标签
:验证当前用户不属于该角色,与hasRole标签想反,shiro标签: <shiro:hasRole name="admin">  Administer the system </shiro:hasRole> ;freemarker中:<@shiro.hasRole name="admin">Hello admin!</@shiro.hasRole> 
    
lacksPermission标签:验证当前用户不拥有某种权限,与hasPermission标签是相对的,
shiro标签:
 <shiro:lacksPermission name="/order:*"> 
trade 
</shiro:lacksPermission> ;
freemarker中:
<@shiro.lacksPermission name="/order:*">trade</@shiro.lacksPermission> 
    
5、
注意:此情况只是对没有使用sitemesh有效,若freemarker使用了装饰器模板来对返回页面进行装饰,这些标签只能用在返回的ftl页面中,而不能用在模板ftl中,include引入的会解析不了。
 
 
解决上述问题,可以通过修改freemarker的重写覆盖源码的Configuration类来实现,这样做的话不仅可以实现上述集成的效果,而且还避免的装饰页面不生效的问题,具体做法如下:
1、将 freemarker.template.
Configuration.java中的源码复制到项目中,包命名和类命名与之完全相同,修改自己复制后的类中loadBuiltInSharedVariables()方法,添加sharedVariables.put("shiro", new ShiroTags());,如下:ShiroTags是上述shiro-freemarker-tags.jar中定义的。
 
2、修改web.xml文件,如下,红色字体是需要在shiroFilter中配置的,因为动态请求页面中的标签是通过REQUEST获取的,而静态装饰页面中的标签是通过FORWARD或者INCLUDE获取的,否则在解析标签时获取不到当前用户的subject信息。另外,shiroFilter建议配置在sitemesh之前。
shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
true
targetFilterLifecycle
true
shiroFilter
*.htm
REQUEST
FORWARD
INCLUDE
sitemesh
com.opensymphony.module.sitemesh.filter.PageFilter
sitemesh
/*
 
也可以到我的CSDN博客大家讨论 
 

转载于:https://my.oschina.net/xiaominmin/blog/1598321

你可能感兴趣的文章
Linux NFS服务器配置
查看>>
C++实现计数排序
查看>>
PPT组件Aspose.Slides V17.8发布 | 支持PP2010 PPTX与嵌入式视频
查看>>
Postfix全功能 (1)
查看>>
DOS系统功能调用表(INT 21H)
查看>>
作为JavaScript开发人员,这些必备的VS Code插件你都用过吗
查看>>
未来云世界畅想
查看>>
进程与计划任务
查看>>
组合模式
查看>>
linux文件操作之ls、mkdir、rmdir、cp命令使用
查看>>
观察最大堆的插入/删除元素后最大堆的变化
查看>>
oracle导入时IMP-00010: 不是有效的导出文件, 头部验证失败
查看>>
R:corrplot包
查看>>
用SPK技术分析,泰坦尼克号沉船之后哪些人活下来了
查看>>
多线程(八)---单例模式并发访问
查看>>
堵车预测神器诞生 浙江已用来治疗高速顽疾
查看>>
Android Span的简单使用
查看>>
centos7 挂载数据盘
查看>>
Prometheus+Grafana监控MySQL
查看>>
cas server 实现LDAP、数据库认证
查看>>