Java 在ApacheTomcat中启用会话
我在设置和检索会话时遇到了一个奇怪的问题 我有一个JavaSpringMVC应用程序。但是客户端没有使用JSP。这是一个使用AngularJS开发的独立应用程序。登录时,我正在登录控制器中设置会话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
@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*/