下面都是平时学习中遇到的不常见的异常,后面会持续更新…
1、java.lang.IllegalArgumentException:The org.apache.shiro.session.mgt.DelegatingSession implementation requires that the SessionKey argument returns a non-null sessionId to support the Session.getId() invocations.
解决:这个异常出现的原因是因为session已经过期,而客户端cookie再拿过期的sessionId去请求session会报错,因此需要为cookie设置过期时间,并且要和session的过期时间一致。在ShrioConfig中如下设置:
@Bean(name = "SecurityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm,
@Qualifier("myDefaultWebSessionManager") DefaultWebSessionManager defaultWebSessionManager,
@Qualifier("myCacheManager") MyCacheManager myCacheManager) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm);
securityManager.setCacheManager(myCacheManager);
securityManager.setSessionManager(defaultWebSessionManager);
return securityManager;
}
@Bean
public DefaultWebSessionManager myDefaultWebSessionManager(MySessionDao mySessionDao, SimpleCookie simpleCookie) {
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
defaultWebSessionManager.setSessionDAO(mySessionDao);
//设置我们自定义的cookie
defaultWebSessionManager.setSessionIdCookie(simpleCookie);
return defaultWebSessionManager;
}
/**
* 设置自定义cookie
*/
@Bean
public SimpleCookie simpleCookie() {
SimpleCookie simpleCookie = new SimpleCookie("myCookie");
simpleCookie.setPath("/");
//设置cookie的过期时间是30秒,和session的过期时间一致。
simpleCookie.setMaxAge(30);
return simpleCookie;
}
注意上面注释的地方就是需要我们修改的地方。