在每个请求的 PreProcessInterceptor 中获得新的 Http Session
New Http Session obtained in PreProcessInterceptor on every Request
我有一个实现了 PreProcessInterceptor.
的拦截器
我需要在 preProcess 方法中获取 HttpSession 对象,所以我使用:
@Context
private HttpServletRequest httpRequest;
然后:
httpRequest.getSession();
获取 HttpSession 对象。
起初我认为一切正常,但后来我意识到 httpRequest.getSession() 在每次请求时返回一个新的 HttpSession 对象。
我需要在用户第一次请求时设置一些会话属性,然后在以后的请求中使用这些属性。属性设置正确,我什至可以沿着同一个请求堆栈向下访问这些属性。但是,由于我对每个新请求都获得一个新会话,因此我无法访问这些属性。
我是否需要从客户端发送一些东西来做我的 REST 服务,比如令牌之类的东西?
这是我的拦截器的更完整视图
@Provider
@ServerInterceptor
@SecurityPrecedence
public class SecurityInterceptor implements PreProcessInterceptor, AcceptedByMethod {
...
@Context
private HttpServletRequest httpRequest;
@Override
public boolean accept(Class classe, Method metodo) {
return metodo.getAnnotation(PermitAll.class) == null;
}
...
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod resourceMethod) {
HttpSession httpSession = httpRequest.getSession();
// Set attributes on httpSession
...
return null;
}
}
Session尝试HTTP Cookies的概念。
第一个 HTTP 请求的处理会检测到没有当前 Session 并创建一个新请求。每当响应返回给客户端时,Session ID 就会被填充为 Cookie(Http 响应 Header)。
如果您的第二个 HTTP 请求对同一个 Cookie 有一个请求 Header,则不会创建新的 httpSession。
因此,每当您向服务器发送请求时,请检查服务器中是否存在 Cookie,并在每次请求时发送该 cookie。
我有一个实现了 PreProcessInterceptor.
的拦截器我需要在 preProcess 方法中获取 HttpSession 对象,所以我使用:
@Context
private HttpServletRequest httpRequest;
然后:
httpRequest.getSession();
获取 HttpSession 对象。
起初我认为一切正常,但后来我意识到 httpRequest.getSession() 在每次请求时返回一个新的 HttpSession 对象。
我需要在用户第一次请求时设置一些会话属性,然后在以后的请求中使用这些属性。属性设置正确,我什至可以沿着同一个请求堆栈向下访问这些属性。但是,由于我对每个新请求都获得一个新会话,因此我无法访问这些属性。
我是否需要从客户端发送一些东西来做我的 REST 服务,比如令牌之类的东西?
这是我的拦截器的更完整视图
@Provider
@ServerInterceptor
@SecurityPrecedence
public class SecurityInterceptor implements PreProcessInterceptor, AcceptedByMethod {
...
@Context
private HttpServletRequest httpRequest;
@Override
public boolean accept(Class classe, Method metodo) {
return metodo.getAnnotation(PermitAll.class) == null;
}
...
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod resourceMethod) {
HttpSession httpSession = httpRequest.getSession();
// Set attributes on httpSession
...
return null;
}
}
Session尝试HTTP Cookies的概念。
第一个 HTTP 请求的处理会检测到没有当前 Session 并创建一个新请求。每当响应返回给客户端时,Session ID 就会被填充为 Cookie(Http 响应 Header)。
如果您的第二个 HTTP 请求对同一个 Cookie 有一个请求 Header,则不会创建新的 httpSession。
因此,每当您向服务器发送请求时,请检查服务器中是否存在 Cookie,并在每次请求时发送该 cookie。