先直接说解决办法:
直接在shiro配置类中添加一下代码就能解决:
@Configuration
public class MyShiroConfig {
/**
* 解决shiro的URL中出现sessionID的情况
* EG: localhost:8080/toLogin;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4
* @return
*/
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
return defaultWebSessionManager;
}
}
然后将该bean注入到DefaultWebSecurityManagerbean中即可,一下是完整写法:
@Bean(name = "securityManager")
public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("realm") MyRealm myRealm, @Qualifier("webSessionManager") DefaultWebSessionManager sessionManager) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myRealm);
securityManager.setSessionManager(sessionManager);
return securityManager;
}
/**
* 解决shiro的URL中出现sessionID的情况
* EG: localhost:8080/toLogin;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4
* @return
*/
@Bean
@Qualifier("webSessionManager")
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
return defaultWebSessionManager;
}
添加后重启项目就会生效,URL中不会出现类似;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4的sessionID信息
关于这个问题是怎么出现的,可以大致这样理解:
1、当访问localhost:8080/,测试shiro进行拦截发现还没登录,则shiro则会在内部进行一个重定向到localhost:8080/toLogin
2、但是server服务器并不知道是shiro的重定向,重定向的请求中没有session、cookie等信息,服务器就会以为是客户端禁用了该功能,所以服务器就自动为其分配一个sessionid
3、所以响应到客户端的url就被添加上了sessionid