我有一个项目要支持android,ios,pc网络。我尝试使用https://github.com/spring-projects/spring-session,它可以只在应用程序中配置以支持HttpSession和rest令牌吗?
如果可以,我如何配置它?
发布于 2015-10-23 21:11:57
对我来说起作用的一件事是使用Cookie和Header实现中的代码重新实现***HttpSessionStrategy。
你可以在这里看到这些类的具体实现:
所以getRequestedSessionId变成了:
public String getRequestedSessionId(HttpServletRequest request) {
// header part
String sessionId = request.getHeader(headerName);
if(sessionId != null && !sessionId.isEmpty())
return sessionId;
// cookie part
Map<String,String> sessionIds = getSessionIds(request);
String sessionAlias = getCurrentSessionAlias(request);
return sessionIds.get(sessionAlias);
}onInvalidateSession变成:
public void onInvalidateSession(HttpServletRequest request, HttpServletResponse response) {
// header part
response.setHeader(headerName, "");
// cookie part
Map<String,String> sessionIds = getSessionIds(request);
String requestedAlias = getCurrentSessionAlias(request);
sessionIds.remove(requestedAlias);
Cookie sessionCookie = createSessionCookie(request, sessionIds);
response.addCookie(sessionCookie);
}onNewSession变成:
public void onNewSession(Session session, HttpServletRequest request, HttpServletResponse response) {
// header part
response.setHeader(headerName, session.getId());
// cookie part
Set<String> sessionIdsWritten = getSessionIdsWritten(request);
if(sessionIdsWritten.contains(session.getId())) {
return;
}
sessionIdsWritten.add(session.getId());
Map<String,String> sessionIds = getSessionIds(request);
String sessionAlias = getCurrentSessionAlias(request);
sessionIds.put(sessionAlias, session.getId());
Cookie sessionCookie = createSessionCookie(request, sessionIds);
response.addCookie(sessionCookie);
}我在生产中将其用于浏览器/移动REST API,它满足了我的所有需求。
发布于 2016-06-28 02:18:58
您可以利用spring的BeanFactoryPostProcessor重写postProcessAfterInitialization()来配置SessionRepositoryFilter的httpSessionStrategy,方法是在spring初始化后调用它的setHttpSessionStrategy()方法。
https://stackoverflow.com/questions/30082539
复制相似问题