在用户登录时候把user存放在session中,在用户访问某些特定方法时候会被拦截,来判断用户是否有调用这些方法的权限.
环境:用户已经登录,没有访问某些方法的权限,这是我把数据库中用户的权限放开,没有重新登录,用户可以去访问那些需要权限的方法
问题:只有在登录的时候才把user放入session中,为什么在没有权限时候登录 手动改了权限后 用户可以访问那些方法
[quote]在登录时候把user存放到session中 [/quote]
你断点调试,这个段代码,能看到“restricted ”在数据库更改前后完全不一样?那你在观察一下user本身是否有变化,除了“restricted ”属性外。
使用了什么框架了吗?也许授权只在登录的时候进行。
听明白了你的意思,不过不知道你的
[quote]
在用户访问某些特定方法时候会被拦截,来判断用户是否有调用这些方法的权限.
[/quote]
这个地方是通过什么实现的,session登录时候存了你的用户user,跟权限没什么关系把,如果你的权限控制是动态的,也就是说,每次控制时候都会通过数据库查询,那么你数据库放开了权限,自然的,不需要重新登录也能够改变用户的权限。
如果你想要在数据库放开了用户权限之后,用户必须通过重新登录来实现的话,你的权限控制这里,对于数据库里存储的用户权限,必须只在登录的时候查询出来存放进session(存入session只是一种方法,关键是这个权限不能是动态的。).这样即使数据库权限放开了,用户不重新登录,还是无法访问那些方法。
当然不用重新登陆,因为你已经把用户放到session中了
判断的时候也是从session中取了,去数据库匹配的吧,所以只要数据库改了,就是马上生效的.
关键在于你判断用户是否有权限的依据来自哪里,如果每次都是查数据库,那自然数据库一改,权限就变了。你可以在用户登录是把用户权限保存到session,这样当需要权限控制时,到session中查找,这样就可以了。
[quote]
我的意思就是在user没有重新登录的情况下,手动改了数据库中user的这个属性,在拦截器中获取的user这个属性应该是手动更改之前的值 用的struts2+hibernate+spring
[/quote]
是的呀,上面大家说的都是这个意思。可能你的拦截器获取user权限属性的方式是从数据库有把user加载进来,然后判断,这样自然获取到更改数据库后的新权限了。如果在登录是把该属性直接保存在session中,拦截器判断时从session中获取该属性,那只要用户没有重新登录,session中的值是不会变的,这样即使你更改数据库user本次登录的权限也不会变。
关键就在于你判断用户权限有没有查数据库?
把拦截器判断权限的代码贴出来看看。