`
苦逼老周
  • 浏览: 5897 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

freemarker集成shiro标签

阅读更多
最近在做权限控制的时候用到了shiro,可惜一窍不通,学了一段时间之后,在freemarker装饰器中集成shiro标签时遇到了一点问题,网上资料都是在普通页面实现,特此记录下,如有理解不对的地方还请各位指正。
1、需要引入jar包,或者到github上下载源码打包使用:https://github.com/zhoushuaichang/shiro-freemarker-tags
 
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,如下
<!--<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">-->
<bean id="freemarkerConfig" class="com.***.shiro.tag.ShiroTagFreeMarkerConfigurer"> <!--shiro标签仅限用在该路径下的ftl页面,不能使用include引入--> <property name="templateLoaderPath" value="/WEB-INF/viewftl/" /> <property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">utf-8</prop>
<prop key="number_format">\#0.\#\#\#\#\#</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
<!--<prop key="auto_import">/common/page.ftl as p</prop>-->
<!--<prop key="auto_include">/common/page.ftl</prop>-->
</props>
</property>
</bean>
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之前。
<!-- shiro 安全过滤器 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>*.htm</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<!-- sitemesh 装饰配置 -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 
也可以到我的CSDN博客大家讨论 http://blog.csdn.net/lingyundouer/article/details/50487459
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

  • 大小: 21.2 KB
分享到:
评论

相关推荐

    springboot集成freemarker和shiro框架

    1. 在FreeMarker模板中使用Shiro标签库:在.ftl文件顶部引入Shiro标签库: ```html &lt;#assign shiro = "shiro:${'@org.apache.shiro.web.tags.ShiroTagLibHandler@getTagLibUri()'}"&gt; ${shiro}" as shiro/&gt; ``` 2. ...

    freemarker的shiro标签

    1. **Shiro标签库**:Shiro提供了与FreeMarker集成的标签库,使得在FreeMarker模板中可以直接使用Shiro的权限控制功能。例如,`&lt;@shiro.hasPermission&gt;`标签可以用来判断当前用户是否有某个操作的权限,如果用户有...

    shiro.freemarker.ShiroTags已打包

    ShiroTags 是 Shiro 提供的一套用于模板引擎的标签库,如 Freemarker 和 JSP,它们使得在视图层集成权限控制变得更为便捷。 `com.jagregory.shiro.freemarker.ShiroTags` 是 Jagregory 开发的一个扩展,将 Apache ...

    shiro-freemarker-tags-0.1-SNAPSHOT.jar

    freemarker集成shiro标签

    spring boot 集成 shiro 自定义密码验证 自定义freemarker标签根据权限渲染不同页面(推荐

    在这个示例中,我们将介绍如何将 Shiro 集成到 Spring Boot 项目中,并实现自定义密码验证和 Freemarker 标签根据权限渲染不同页面。 首先,需要在 pom.xml 文件中添加 Shiro 的依赖项: ```xml &lt;groupId&gt;org....

    Shiro freemarker demo

    7. **实际应用**:这个Demo可能包含了一个简单的Web应用,展示如何在Freemarker模板中使用Shiro标签进行权限控制,比如控制菜单项的显示、操作按钮的启用等,确保只有具备特定权限的用户才能访问特定的功能。...

    Jfinalplugin,angularjfinal-angular-icedog.zip

    并提供akka异步执行集成,多数据源自动orm映射,flyway数据库脚本升级, shiro 权限系统 freemarker-shiro标签支持,以及其他改进 使用angularjs作为前端框架, 以及 bootstrap requireJs+coffeescript+less...

    springboot+shiro

    标题 "springboot+shiro" 暗示我们要讨论的是如何在Spring Boot项目中集成Apache Shiro进行权限管理和认证。Apache Shiro是一个强大且易用的Java安全框架,提供了身份验证、授权、加密和会话管理功能,可以非常轻松...

    JFinal2.0整合shiro权限框架,简单好用

    - **使用Shiro标签**:在视图层,可以利用Shiro的标签库,如`&lt;shiro:hasPermission&gt;`、`&lt;shiro:principal&gt;`等,动态展示或隐藏页面元素。 **4. 示例代码** 以下是一个简单的Shiro Realm示例: ```java public ...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    解决方案:在 FreeMarkerViewExtend.java 33行处 增加了BasePath ,通过BasePath 来控制请求目录,在 Freemarker 中可以自由使用,而 JSP 中是直接在 JSP 中获取BasePath 使用。 解决后遗症:因为我们的权限是通过...

    springboot-shiro-2.rar

    在使用Thymeleaf或Freemarker时,Shiro提供了一些标签库,可以用来显示或隐藏某些内容,根据用户的角色和权限。 四、实战项目解析 "springboot-shiro-2.rar"项目包含了以上所述的整合流程,通过阅读和实践这个小...

    ssm+shiro所需包

    Apache Shiro是Java的安全管理框架,`ssm+shiro`标签表明项目中会用到Shiro进行权限管理和认证。Shiro能处理用户身份验证、授权、会话管理和安全性,为开发者提供了简单易用的API。 另外,`aspectjweaver-1.7.1.jar...

    SpringBoot集成MyBatisPlus

    | ├── FreeMarker -- 自定义FreeMarker标签 │ ├── resources | ├── mapper -- SQL对应的XML文件 | ├── templates -- FreeMarker模版 │ ├── webapp | ├── statics -- 静态资源 | ├── upload -...

    jfinal插件集合demojfinal-demo.zip

    1.使用jfinal-shiro实现数据库级别的权限灵活定制,和freemarker的权限标签 2.使用jfinal-captcha实现验证码 3.使用jfinal-web实现根据ajax请求返回json数据,其他返回默认数据,支持继承JFController使用getModels...

    SpringBoot_MyBatisPlus_Multi:SpringBoot集成MyBatisPlus多模块Maven开发

    是SpringBoot集成MyBatisPlus 升级版的maven多模块开发项目结构wstro├──sql 项目SQL语句│ ├──App ... ├─FreeMarker 自定义FreeMarker标签│ ├──resources │ ├─mapper SQL对应的XML文件│ ├─templat

    ssh三大框架集成步骤

    - 考虑安全性,可以集成Spring Security或Apache Shiro进行权限管理。 以上就是SSH集成的基本步骤,实际开发中可能还会涉及到更多细节和优化,但这个流程提供了一个基本的框架集成指南。在学习和实践中,不断深入...

    SpringBoot_MyBatisPlus:SpringBoot集成MyBatisPlus

    数据持久化实体类│├── datasources -- 多数据源工具类│├── shiro -- Shiro验证框架│├── task -- Quartz定时任务│├── util -- 工具类| ├── FreeMarker -- 自定义FreeMarker标签│├── ...

    jfinal-ext-3.1.2.zip

    2. **模板引擎增强**:扩展了FreeMarker和Beetl两种模板引擎的功能,提供了更多的模板标签和宏,简化视图层的开发。 3. **缓存管理**:集成了多种缓存策略,如Redis、Memcached等,便于实现高性能的数据缓存。 4. ...

    分享6个国内优秀Java后台管理框架的开源项目,建议收藏!.pdf

    Ninja集成了ORM框架如JPA或Hibernate,使用Freemarker或Thymeleaf作为模板引擎,提供身份验证和授权功能。其Web接口易于使用,且支持RESTful风格,适合构建现代化的Web应用。 6. EasyFrameWork / EasyFrame ...

    基于Java的护肤品网上购物系统源码数据库.zip

    8. **安全性**: 使用Spring Security或Apache Shiro等框架来实现用户认证和授权,保护用户数据和系统安全。 9. **物流和库存管理**: 系统可能有集成的物流跟踪和库存管理模块,用于处理订单发货和库存更新。 10. *...

Global site tag (gtag.js) - Google Analytics