在Shiro進行第一次重定向時,會在url后攜帶jsessionid,這會導致400錯誤(無法找到該網頁)。
原因在於ShiroHttpServletResponse配置類的doIsEncodeable當中,會將url自動拼接jsessionid。
解決辦法:
- 在Shiro的配置類中的sessionManager()方法中,將sessionIdUrlRewritingEnabled屬性設置為false。該方法返回一個DefaultWebSessionManager實例。
- 將上面方法返回的實例設置為DefaultWebSecurityManager實例的sessionManager。
代碼如下:
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setSessionManager(sessionManager());
securityManager.setRealm(myShiroRealm());
//將cookie管理器交給SecurityManager進行管理
securityManager.setRememberMeManager(rememberMeManager());
return securityManager;
}
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setSessionIdUrlRewritingEnabled(false);
return sessionManager;
}