Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ApacheTomcat中启用会话_Java_Session_Tomcat_Spring Mvc - Fatal编程技术网

Java 在ApacheTomcat中启用会话

Java 在ApacheTomcat中启用会话,java,session,tomcat,spring-mvc,Java,Session,Tomcat,Spring Mvc,我在设置和检索会话时遇到了一个奇怪的问题 我有一个JavaSpringMVC应用程序。但是客户端没有使用JSP。这是一个使用AngularJS开发的独立应用程序。登录时,我正在登录控制器中设置会话 @RequestMapping(value = "/loginUser", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ObejctResponse log

我在设置和检索会话时遇到了一个奇怪的问题

我有一个JavaSpringMVC应用程序。但是客户端没有使用JSP。这是一个使用AngularJS开发的独立应用程序。登录时,我正在登录控制器中设置会话

@RequestMapping(value = "/loginUser", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ObejctResponse loginUser(@RequestBody User user, HttpServletRequest request) {

    //code checking username and password
    HttpSession session = request.getSession();
    session.setAttribute(USERID, username);
    session.setAttribute(USER, user);
    session.setAttribute(LOGGED_IN, true);

    //code
}
我有一个拦截器来检查会话是否为null。如果为null,则返回false。在客户端,如果没有返回任何内容,它将注销并转到登录页面

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object object) throws Exception {
        boolean authenticate=false;
        String pathRequest = request.getPathInfo().toLowerCase();

        if(pathRequest.matches(".*(loginuser|logoutuser|switchuser|restservice|resetpassword|changepassword|checkemailid).*")) {
            authenticate = true;
        }
        /* String servletPath = request.getServletPath().toLowerCase();
        if(servletPath.matches(".*(rest).*")) {
            authenticate = true;
        } */
        if(!authenticate) {
            HttpSession session = request.getSession(true); /*don't create if it doesn't exist*/
            if(session.getAttribute(USER) != null) {
                authenticate = true;
            }
        }
        return authenticate;
    }
我试着在我的本地tomcat中部署这两种战争,它工作得很好

在digital ocean machine中,当我尝试部署两者时,它正在登录,然后当我单击任何链接时,它将请求拦截器并返回false,导致在前端注销。我跳过了请求身份验证会话,然后它将转到相应的控制器,但引发空指针异常,因为我正在从会话中获取用户ID

在当地,它运行良好。但在远程机器中,它不是。除了端口,我没有更改任何配置。我必须检查哪个文件,以及我必须执行哪些操作才能启用会话

我在远程机器上使用ApacheTomcat7.0.47,在本地机器上使用ApacheTomcat7.0.53


你的评论与你的代码相矛盾。其中一个是错的。如果不希望创建会话,则应在此处指定false,而不是true。这行代码将始终返回非空会话。

当我复制时,我忘了更改它。但是我跳过了这个请求拦截器。所有URL都包含rest。因此,我添加它以跳过检查注释代码。但在控制器中,它给出了空指针异常
HttpSession session = request.getSession(true); /*don't create if it doesn't exist*/