在此之前,我是使用自己编写的web安全框架完成基于角色role
的权限验证的,在集群环境中只需要将session
中的信息存放到redis
中即可。然而换成Shiro后,我发现事情麻烦了很多,因为需要学习Shiro的文档,自定义SessionDAO
实现Redis的Session存储,但是这里面还是有一些坑。
通过Reids实现Shiro Session共享
首先在集群环境下,我们不能使用 servlet 规范中的 session, 因此对于web应用,必须配置 Shiro 使用 native session(对应DefaultSessionManager
类)。然后再自定义SessionDAO
接口的实现RedisSessionDAO,并让 native session 使用之。对应的 Spring Bean配置如下:
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 使用native session
securityManager.setSessionManag