首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置spring-session以在一个应用程序中支持HeaderHttpSessionStrategy和CookieHttpSessionStrategy?

如何配置spring-session以在一个应用程序中支持HeaderHttpSessionStrategy和CookieHttpSessionStrategy?
EN

Stack Overflow用户
提问于 2015-05-07 00:32:36
回答 2查看 2.1K关注 0票数 4

我有一个项目要支持android,ios,pc网络。我尝试使用https://github.com/spring-projects/spring-session,它可以只在应用程序中配置以支持HttpSession和rest令牌吗?

如果可以,我如何配置它?

EN

回答 2

Stack Overflow用户

发布于 2015-10-23 21:11:57

对我来说起作用的一件事是使用Cookie和Header实现中的代码重新实现***HttpSessionStrategy

你可以在这里看到这些类的具体实现:

所以getRequestedSessionId变成了:

代码语言:javascript
复制
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变成:

代码语言:javascript
复制
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变成:

代码语言:javascript
复制
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,它满足了我的所有需求。

票数 2
EN

Stack Overflow用户

发布于 2016-06-28 02:18:58

您可以利用spring的BeanFactoryPostProcessor重写postProcessAfterInitialization()来配置SessionRepositoryFilter的httpSessionStrategy,方法是在spring初始化后调用它的setHttpSessionStrategy()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30082539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档