|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-07-20
eseking 写道 谢谢楼上的
我new 一个类SystemContext 然后new一个ThreadLocal private static ThreadLocal _session = new ThreadLocal(); public static HttpSession get_session() { HttpSession session =(HttpSession)_session.get(); return session; } public static void set_session(HttpSession session) { _session.set(session); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { SystemContext.set_session(httpRequest.getSession()); 然后在程序中 service类使用SystemContext.get_session();就行了 是这样么?? 这样的使用,当加载模块多的时候,你的性能降低的很厉害。 下面的你碰到的问题,当你加载一个权限模块的时候,你要把当前的引用的模块的公共权限引进来,我贴的代码已经是很明了,以前有的要对当前的清空,不然会包错的! 先把我贴的代码看明白了在说···你还没理解· |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-20
别放session,放userid就行了,User相关的权限信息放全局缓存(Ehcache,Oscache,Memcache或自己实现等等)里面,需要用到的时候通过UserId去取。
还要注意清空 try{ SystemContext.setUser(userId); chain.doFilter(...); }finally{ SystemContext.setUser(null); } |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-20
同楼上,既然你选择用aop实现而不是普通的拦截访问的方法实现权限管理,为什么要试用session保存数据呢,本身给人的感觉好像市web对业务逻辑的一种入侵
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-20
谢谢大家这么热心回答我的问题
放session 的确是不对 只需要存UserId就可以了 当然还要清空 可是我这个二次拦截的问题还是没搞定 是不是配置写法有问题? to wm920 当你加载一个权限模块的时候,你要把当前的引用的模块的公共权限引进来 我的权限模块跟你的设计不一样 我的是基于RBAC的 |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-20
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> <!-- 配置事务特性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置哪些类的方法需要进行事务管理 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution(* com.wenhua.managers.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/> <!-- 配置对ADD操作的权限验证 --> <aop:aspect id="securityAspect" ref="permissionManager"> <aop:pointcut expression="execution(* com.wenhua.managers.*.addRole*(..)) " id="addMethod"/> <aop:before method="checkPermission" pointcut-ref="addMethod"/> </aop:aspect> </aop:config> 去掉<!-- 配置对ADD操作的权限验证 --> 程序正常 加入<!-- 配置对ADD操作的权限验证 --> 拦截可以运行 但是其他增删改查的方法就会报错 Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-20
加上order,应该先安全,后事务
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-21
remove 'readOnly' marker from transaction definition
看报错的提示分析,我觉得尝试一下把<tx:method name="*" read-only="true"/> 去掉。 建议把你的测试工程发上来好让大家下载帮忙调试! |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-22
javaeye的ubb还是有问题,在ubb和可视化编辑器之间切换内容还是会变化,有什么做的比较好的
|
|
| 返回顶楼 | |








