标签:getSession StaticSessionContext spring void sessionId session security null publ
spring security为了防止固定回话攻击会一直修改sessionId,所以在登录前存在session里的数据在登录后是获取不到的。为了解决这种情况可以监听session的变化做相应的更改。
@WebListener
public class SessionListener implements HttpSessionListener, HttpSessionIdListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
StaticSessionContext.addSession(se.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
StaticSessionContext.removeSession(session);
}
// 在改方法中可以将原来session的数据移到新的session中
@Override
public void sessionIdChanged(HttpSessionEvent httpSessionEvent, String oldSessionId) {
HttpSession oldSession = StaticSessionContext.getSession(oldSessionId);
if(oldSession != null) {
StaticSessionContext.removeSession(oldSession);
}
StaticSessionContext.addSession(httpSessionEvent.getSession());
}
}
public class StaticSessionContext {
private static ConcurrentMap<String, HttpSession> attributes = new ConcurrentHashMap();
private StaticSessionContext() {
}
public static void addSession(HttpSession session) {
if(session != null) {
System.err.println(session.getId());
attributes.put(session.getId(), session);
}
}
public static void removeSession(HttpSession session) {
if(session != null) {
attributes.remove(session.getId());
}
}
public static HttpSession getSession(String sessionId) {
if(sessionId == null) {
return null;
}
return attributes.get(sessionId);
}
}
参考地址:https://blog.csdn.net/qq_36500178/article/details/113091776
标签:getSession,StaticSessionContext,spring,void,sessionId,session,security,null,publ 来源: https://www.cnblogs.com/yourblog/p/16110538.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。