关于shiro标签与freemarker模板引擎集成
最近开发的新系统中,使用到了shiro管理权限,前台页面采用freemarker模板来处理的,当前台页面有些按钮或者标签需要权限控制时,freemarker本身对struts2的标签库支持很到位,导入dtd文件(在struts核心包里)在web-info下就行了,然而对shiro的标签支持不是很完整,尽管提供了相关支持。下面说说两者具体怎么集成:
freemarker之所以和shiro标签兼容不好是因为struts2-core.jar的相关类对shiro进行了拦截处理,所以必须重新调整该方法。
1. 下载shiro-freemarker-tags.jar包 ( 里面都封装了和jsp页面导入相同的标签库)
2. 打开struts2-core-2.1.8.1.jar的包,找到FreemarkerManager.class文件,反编译class出来的类中找到getConfiguration(ServletContext servletContext) throws TemplateException 在该类中添加如下代码:config.setSharedVariable("shiro", new ShiroTags()); 然后编译成class文件后重新放入该包对应的位置中,记得编译时工程包路径和环境必须一直,否编译后不可用。
3. 然后在freemarker的模板页面html中添加shiro的标签<@shiro.hasPermission name="auth:role:add">hello world</@shiro.hasPermission> 即可!