Struts 2 拦截器中的会话

Sac*_*dha 5 struts2 struts2-interceptors

我试图通过实现SessionAware接口(我已经实现了该setSession方法)从拦截器内访问会话对象,但我无法以这种方式获取会话对象。

然后我尝试ActionContext.getContext().getSession()并且能够获得会话,但我不知道,但它在每个用户的每个浏览器中第一次都是空的,然后当调用另一个操作时它会被填充。

我认为会议出了问题。为什么它只是第一次给我一个空会话?它是否仅在第一次提供空会话后才设置某些内容?

如果是这种情况,那么每个人都会在第一次请求时显示为访客,然后在第二次请求时显示用户名,如此下去。

或者我以错误的方式获得会议?

我看到了在拦截器中获取会话的代码,但这对我不起作用,因为它找不到常量HTTP_REQUEST

final ActionContext context = invocation.getInvocationContext();

HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);

HttpSession session = request.getSession(true);

Object user = session.getAttribute(Constants.USER_HANDLE);
Run Code Online (Sandbox Code Playgroud)

对于解决任何问题有什么建议吗?

我忘了提一下 - 我的网站是一个安全网站(https),所以如果用户没有登录,它不会让他进入网站,如果他登录了,至少他的用户名应该在会话中。难道不应该吗?

Sha*_* D. 3

我有一个拦截器,它也可以将会话捕获为地图。你尝试过这样的事情吗?这对我有用。

public String intercept( ActionInvocation actionInvocation ) throws Exception {
    Map session = actionInvocation.getInvocationContext().getSession();
Run Code Online (Sandbox Code Playgroud)