JFinal 整合 Shiro

leon_rock 发布于 2013/06/02 06:01
阅读 7K+
收藏 24

最近整合JFinal和Shiro遇到的问题,希望能给你们提示与帮助。

首先,JFinal和Shiro本人都是刚刚接触,JFinal上手很快,但Shiro上手比较费劲,看了很长时间的文档。

下面说一下整合JFinal配置这里就不说了。

按照官方Shiro配置
1、添加shiro-all-1.2.1.jar  包括Shiro所依赖的jar包commons-beanutils-1.8.3.jar、commons-logging-1.1.3.jar和ehcache-core-2.6.6.jar

2、配置web.xml

<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>


<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>*/</url-pattern>
</filter-mapping>

3、配置Shiro.ini (该文件Shiro默认读取路径为classpath)
[main]

#realm
myRealm = com.myweb.ext.shiro.MyShiroRealm
securityManager.realm = $myRealm


#cache
shiroCacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
shiroCacheManager.cacheManagerConfigFile = classpath:ehcache-shiro.xml
securityManager.cacheManager = $shiroCacheManager


#session
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionDAO.activeSessionsCacheName = shiro-activeSessionCache
sessionManager.sessionDAO = $sessionDAO
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 360000

这里自己重写一个MyShiroRealm,没有使用默认的ehcache.xml,原因是怕有缓存名称冲突,我的echcache-shiro.xml
<ehcache name="shiro">
    <diskStore path="java.io.tmpdir/shiro-ehcache"/>

    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="false"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            />

    <cache name="myRealm.authorizationCache" 
           maxElementsInMemory="10000" 
           overflowToDisk="true" 
           eternal="true" 
           timeToLiveSeconds="0" 
           timeToIdleSeconds="0" 
           diskPersistent="true" 
           diskExpiryThreadIntervalSeconds="600"> 
    </cache>    
        
    <cache name="shiro-activeSessionCache"
           maxElementsInMemory="10000"
           overflowToDisk="true"
           eternal="true"
           timeToLiveSeconds="0"
           timeToIdleSeconds="0"
           diskPersistent="true"
           diskExpiryThreadIntervalSeconds="600"/>
</ehcache>

其实这样在JFinal就整合好了Shiro,剩下的就是在开发过程中使用Shiro了。

下面说一下整合工程中我遇到的问题

在配置过程中我遇到的问题是缓存异常:
起初Shiro与JFinal整合的时候自己写一个ShiroPlugin.class

public class ShiroPlugin implements IPlugin {

@Override
public boolean start() {
Factory<SecurityManager> factory = new IniSecurityManagerFactory(
"classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager); return true; } @Override public boolean stop() { return false; } }


然后在JFinal配置类中添加了


me.add(new ShiroPlugin());


就是因为这一段代码困扰了我很长的时间,起初以为是自己shiro配置不对,其实在启动项目的时候shiro已经默认启动好了,如果JFinal再加载shiro,那么会出现ehcache异常,提示ehcache已经存在不能创建,虽然再该问题上我话了很长的时间,但对shiro有了更深的认识,分享一下能给你带来帮助。


加载中
1
路、一直都在
路、一直都在
mark  谢谢楼主
leon_rock
leon_rock
http://www.oschina.net/question/925382_114550 推荐 可以看这个比较全面
0
JFinal
JFinal
谢谢分享,建议再弄成博客的形式,便于大家分享,也便于随时修改填充内容  
0
shooter118
shooter118

前端页面是如何整合shiro标签的?

我在页面引入<#assign  shiro =JspTaglibs["/WEB-INF/tld/shiro.tld"]>报错,无法识别JspTaglibs,请问你是如何解决的?

leon_rock
leon_rock
我用得是beetl,官方qq群里有提供的类
0
闲大赋
闲大赋

引用来自“shooter118”的答案

前端页面是如何整合shiro标签的?

我在页面引入<#assign  shiro =JspTaglibs["/WEB-INF/tld/shiro.tld"]>报错,无法识别JspTaglibs,请问你是如何解决的?

@ shooter118   http://my.oschina.net/u/567839/blog/143109 

这是前端用beetl 例子

0
铂金小虫
铂金小虫
你好,最近刚接触shiro。有个疑问,shiro是支持一个用户对应多个role的,但是一般的RBAC好像都是对应一个role就够了啊。
leon_rock
leon_rock
一个用户对应一个role,但是一个role可能对应一组不同的权限控制
0
铂金小虫
铂金小虫
一个用户可以对应role1,role2的。主要看权限划分了,可以是role1,role2包含不同的权限,简单的完全可以合并在一起。貌似这种类型是RBAC里的用户组的概念。不过现在一般一个用户就对应一个角色类型了。
另外shiro提供的权限注释,能直接用吗?还是要配合jfinal等的拦截器?
铂金小虫
铂金小虫
明天看看。就web应用而言,感觉用shiro不是方便很多啊。一样要建立角色功能表,注释也需要配合拦截器之类。页面上提供的jsp tag倒是方便现成。 应该在单点登录以及加密上有他的方便性和复用性。
leon_rock
leon_rock
http://git.oschina.net/myaniu/jfinalshiroplugin http://my.oschina.net/myaniu/blog/137205
leon_rock
leon_rock
有高人把shior 整合到JFinal的 直接注释
0
进击的代码
进击的代码
LZ你的shiro集成了ehcache,重启VM的话cache能恢复吗?我的重启了就啥都没了
leon_rock
leon_rock
remember me true 了吗?
0
12叔
12叔

jfinal 跟shiro 整合 第一次运行老是org.apache.shiro.UnavailableSecurityManagerException

然后修改一下文件 重新载入的时候就好使了

这是怎么回事百度一下老说 web.xml 顺序写错了 但是没错啊



0
leon_rock
leon_rock
今晚弄个工程放到git上去
12叔
12叔
@银星 唉 昨天刚解决了
leon_rock
leon_rock
回复 @12叔 : http://my.oschina.net/smile622/blog/203459
leon_rock
leon_rock
@12叔 Shiro 缓存在jerry下容易出现问题~建议在tomcat下用JRebel 提高开发效率
12叔
12叔
发现 用jerry 就出错 tomcat 倒是没问题
0
施立
施立
我按照你的方法, 增加了配置. 在方法上增加了 @RequiresAuthentication 不起作用怎么办
返回顶部
顶部