每日进步一点点

每天进步一点点

每天进步一点点

2016-11-08

1、安装activiti-eclipse插件

Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
这么安装,但是报错,错误信息是有一个jar一直下载不下来,这个jar是:
org.eclipse.graphiti_0.11.4.v20150701-1432.jar
比较神奇的是,eclipse访问那个链接不行,但是从浏览器能下载,下载下来后放到plugins文件夹后,
再次安装,OK,完事

 

2016-11-22

1、在配置shiro的配置文件的时候报错,查出原因就是下面这行导致的

<bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"></bean>

报错信息:

Cannot convert value of type [org.hibernate.impl.SessionFactoryImpl] to required type [org.apache.shiro.session.mgt.SessionFactory] for property 'sessionFactory': no matching editors or conversion strategy found

具体原因是因为系统在配置hibernate的时候也使用了id="sessionFactory",导致冲突,将其改下名字就OK了

 PS:事实证明,上面的方案是不可行的,修改了之后,shiro好使了,但是hibernate获取不到sessionFactory了

所以就用了最笨的方法,如下配置:

新增一个sessionFactory的实现<bean id="sessionFactoryShiro" class="org.apache.shiro.session.mgt.SimpleSessionFactory"></bean>

然后注入:<bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">

<property name="sessionDAO" ref="shiroSessionDAO"/>

<property name="sessionFactory" ref="sessionFactoryShiro"/>

</bean>

2016-11-23

1、还是折腾shiro,要做一个踢出用户的功能

之前用Spring Secutity 是有一个方法,直接就可以踢出指定的用户,所以形成了固化思维,一直在shiro中找类似的方法。

但是shiro貌似没有直接提供,网上抄了一顿,算是找到了个还算靠谱的解决方案:

 a:通过sessionDao获取所有的activeSession,如果与此次登录的名称相同,则打一个标签:session.setAttribute('踢出去',TRUE)

 b:写一个拦截器,配置在shiroFilter中,如果发现  '踢出去'  的标记,就调用subject.logout()方法登出

 c:在shirofilter中配置b中的拦截器并使用到要拦截的url中,诸如:/**=forceout,authc 其中forceout是自定义的拦截器

         网上搜一下ForceLogoutFilter,应该会有一堆结果

之前走了一个更弯的路,之前如果判断出用户名相同,我直接session.setTimeOut(0),将session设置为失效,貌似是好使的

但是,反复测试会发现,sessionDao还是能获取到之前的session(shiro可能不是这么判断session失效的)

2、继续折腾shiro,又出了一个幺蛾子:浏览器直接输入程序地址后,跳转到login界面的时候出现了JSESSION,就像这个样子:

http://127.0.0.1/xxxx/login.jsp;JSESSIONID=2ede9ebf-b0c0-48ac-b67a-044c3e841dde

登陆后,shiro认证失败,网上查了一下大概原因:应该是跟浏览器的cookies有关,其实更换一下struts2jar的版本就行了,太低的版本对这个支持不太好,但是我用的是公司的框架,TNND把SSH集合到一个jar了,不太好换,所以采用拦截器的方式解决

网上搜一下:DisableUrlSessionFilter ,应该会有还多转载的