每日进步一点点
每天进步一点点
2016-11-08
1、安装activiti-eclipse插件
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 ,应该会有还多转载的