Shiro在进行第一次重定向时会在url后携带jsessionid,导致访问400。
实力有限,就不分析源码了,需要了解原因的可以查看ShiroHttpServletResponse
类中encodeRedirectURL
、encodeRedirectUrl
、toEncoded
等方法,直接说下解决办法
解决办法:
- 创建一个
DefaultWebSessionManager
类实例,并将它的sessionIdUrlRewritingEnabled
属性设置成false - 再在
DefaultWebSecurityManager
类中将上面的实例设置为它的SessionManager
具体代码如下:
@Autowired
DefaultWebSessionManager defaultSessionManager;
@Autowired
MyRealm myRealm;
@Bean
public DefaultWebSecurityManager userSecurityManager(){
DefaultWebSecurityManager bean = new DefaultWebSecurityManager();
//将下面的bean设置为DefaultWebSecurityManager的SessionManager
bean.setSessionManager(defaultSessionManager);
bean.setRealm(myRealm);
return bean;
}
//创建DefaultWebSessionManager类,并DI注入到IOC容器中
@Bean
public DefaultWebSessionManager mySessionManager(){
DefaultWebSessionManager defaultSessionManager = new DefaultWebSessionManager();
//将sessionIdUrlRewritingEnabled属性设置成false
defaultSessionManager.setSessionIdUrlRewritingEnabled(false);
return defaultSessionManager;
}
@Bean
public MyRealm userRealm(){
return new MyRealm();
}