问题重现:
1、 直接输入登录页面地址 https://127.0.0.1/xxxx/login.do
2、 填写用户信息点登陆
3、 页面跳转到欢迎页面http://127.0.0.1/xxxx/welcome.do
4、 此时springsecurity 会提示session是null,并且跳回登录页面。
原因:
Tomcat下 HTTPS生产的COOKIE JSESSIONID是无法通过HTTP传输的,当页面跳转到欢迎页面时,Tomcat由于无法获取到用户的JSESSIONID,会自动创建新的session,因此spring security会认为用户没有登录,然后跳回登录页面。
候选解决方案:
1、 用户登录后,全程使用https,直到用户登出。但是会影响效率(加密解密)。
2、 所有http的地址都带上JSESSIONID参数。 但是实现代价较高。
3、 从登录页面到HPPT页面跳转只发生在登录成功的那一刻,默认由类DefaultRedirectStrategy实现跳转动作。 想办法在跳转之前把SESSIONID传递给用户。这个方法一劳永逸,从问题产生的源头解决问题。
结论:
采用方案3。