-
Spring MVC Session ID不同的问题5
使用SpringMVC做登陆系统的时候
只要在新页面上打开的界面都会报验证码不正确
自己Debug过后发现一个莫名其妙的问题,Session里根本不存在对应的验证码校验数据
但是请求验证码图片的时候明明已经加入session中了,而且我也没有对这个session进行清空操作
甚至同一个Controller里面,一个是页面内的ajax登陆操作,另一个是新页面的注册操作,登陆可以得到正常的验证码校验信息,新页面就是找不到
仔细对比后发现新页面请求过去得到的Session id居然不同(打开新页面使用的都是window.open或者是<a>标签的_blank方式)
@RequestMapping("/img") public void generateValidateImage(HttpSession session,HttpServletResponse response) throws IOException { String validateCode = ValidateCodeDesigner.generateValidateCode(5); byte[] imageBytes = ValidateCodeDesigner.generateValidateImage(validateCode, 150, 40); session.setAttribute("validatecode", validateCode); logger.debug("session obj id:"+session.getId()); logger.debug("validate:"+validateCode); response.setHeader("Content-Type","image/jpeg"); OutputStream ous = response.getOutputStream(); ous.write(imageBytes); ous.flush(); }
@RequestMapping(value = "/login.action", method = RequestMethod.POST) public @ResponseBody JSONObject doLogin(@RequestParam String uid, @RequestParam String pwd, @RequestParam String validate, HttpSession session) { JSONObject res = new JSONObject(); if (!uid.matches(UID_REX)) { res.put("success", false); res.put("msg", "用户名中包含非法字符"); session.removeAttribute("validatecode"); return res; } logger.debug("session obj id:"+session.getId()); String sessValidate = (String) session.getAttribute("validatecode"); session.removeAttribute("validatecode"); if (sessValidate == null || !sessValidate.toLowerCase().equals(validate.toLowerCase())) { res.put("success", false); res.put("msg", "验证码不正确"); return res; } res = userAccountStorage.doUserLogin(uid, pwd); if (res.getBooleanValue("success")) { session.setAttribute("user", res.getJSONObject("user")); } return res; }
@RequestMapping(value = "/register.action", method = RequestMethod.POST) public @ResponseBody JSONObject doRegister(@RequestParam String uid, @RequestParam String pwd, @RequestParam(required = false) String nick, @RequestParam(required = false) String email, @RequestParam String sex, @RequestParam String validate, HttpSession session) { if (nick == null) { nick = uid; } JSONObject res = new JSONObject(); String sessionValidate = (String) session.getAttribute("validatecode"); logger.debug("session obj id:"+session.getId()); logger.debug("session:"+sessionValidate+",request:"+validate); session.removeAttribute("validatecode"); if (sessionValidate == null || !sessionValidate.toLowerCase().equals(validate.toLowerCase())) { res.put("success", false); res.put("msg", "验证码不正确"); session.removeAttribute("validatecode"); return res; } if (!uid.matches(UID_REX)) { res.put("success", false); res.put("msg", "用户名中包含非法字符"); session.removeAttribute("validatecode"); return res; } switch (sex) { case "男": case "女": case "保密": break; default: sex = "保密"; } return userAccountStorage.doRegisterUser(uid, pwd, nick, email, sex); }
有没有人碰到相同的情况,求解决方案
问题补充:环境:tomcat7,jdk7
Spring 版本:3.2.2.RELEASE
突然想到可能是tomcat的问题
问题补充:不是tomcat的问题,试了另外一个项目的代码一切正常。。。。
问题补充:找到原因了,HTML里面设置的basePath路径格式不对,多了个/。。。。我勒个去,尼玛2013年7月17日 11:35
目前还没有答案
相关推荐
服务器在创建session后,会把sessionid以cookie的形式回写给客户端。只要客户端的浏览器不关,每一次访问服务器都会带上这个sessionid。这样就可以在每次请求的时候获取到session的信息。 下面以spring MVC以例来...
### Spring MVC框架简介 Spring MVC 是一款基于 Java 的 Web 应用框架,它遵循 MVC(Model-View-Controller)设计模式。Spring MVC 提供了一种结构化的开发方式,旨在简化 Web 层的开发过程,同时提供了高度灵活性...
在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第12部分,将帮助开发者掌握如何在Java Web项目中高效地集成这三个核心框架,实现松耦合、可...
**基于JPA+Hibernate+Spring+Spring MVC注解方式项目详解** 在现代Java Web开发中,Spring框架扮演了核心角色,而Spring MVC作为其MVC(Model-View-Controller)实现,提供了强大的Web应用程序构建能力。同时,JPA...
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> ``` 接下来,我们创建一个`LocaleChangeInterceptor`,它允许用户通过URL参数来改变`Locale`。这可以通过在`...
Spring Session是一个开放源码项目,它扩展了Spring MVC,提供了一种统一的方式来管理和存储用户Session。它的核心功能是在多个应用服务器之间共享Session,从而打破了传统Session的单服务器局限性。Spring Session...
Spring框架结合Redis作为Session存储机制,能够有效地解决这个问题。以下将详细介绍如何通过Spring和Redis实现Session共享的步骤。 1. **理解Session共享需求**: 分布式环境下,用户可能会在多个服务器之间跳转,...
【标题】"Spring MVC + Spring + Hibernate 全注解整合开发视频教程 09" 提供了一次深入了解Java企业级应用开发的机会,特别是在使用Spring MVC、Spring和Hibernate这三大核心框架进行全注解配置的场景下。...
为了实现这一目标,就需要解决不同服务器间Session共享的问题。Spring-Session正是为此而设计的一个框架,它提供了一种机制来存储用户的会话信息至中央数据存储区,如Redis等,从而实现跨服务共享。 #### 一、...
1. 自定义SessionId生成器:通过实现`SessionIdGenerator`接口,可以自定义Session ID的生成策略。 2. 分布式锁:在多线程环境中,可以利用SpringSession的锁机制避免并发问题,如使用`SessionLock`。 3. 监听...
Spring MVC 和 Hibernate 是两个在Java Web开发中广泛使用的框架。Spring MVC 用于构建应用程序的前端控制器,提供模型-视图-控制器(MVC)架构,而 Hibernate 是一个强大的对象关系映射(ORM)框架,负责数据库操作...
首先,Spring Session是一个开源项目,由Pivotal Software开发,它扩展了Spring MVC,提供了对HTTP会话(session)的管理支持。Spring Session的核心思想是将session数据从传统的JVM内存中移出,存储到一个独立的...
在Spring MVC中,我们可以通过`SessionFactory`和`Session`对象来与数据库交互。使用`@Autowired`注解可以将Spring管理的`SessionFactory`注入到控制器或服务类中: ```java @Autowired private SessionFactory ...
Spring、Hibernate、Spring MVC 和 Ajax 是四个在Java Web开发中广泛应用的技术框架,它们共同构建了一个高效、灵活且功能丰富的后端系统。以下是对这些技术及其整合应用的详细说明: Spring框架是一个全面的企业级...
在IT行业中,Spring MVC、Spring 4.x和Hibernate 4是三个非常重要的框架,它们各自在Web应用开发中承担着核心角色。Spring MVC是用于构建Web应用程序的模型-视图-控制器(MVC)框架,Spring 4.x是Spring框架的一个...
Spring MVC 默认 URL 处理 404 错误解决方案 在 Spring MVC 框架下,处理 404 错误是一件非常重要的事情。在某些特殊场景下,如果使用 Shiro 安全框架,配置了非 ServletContainer 的 session 管理器,可能会出现 ...
Spring MVC 是一个基于 Java 的轻量级Web应用框架,它主要负责处理后端的业务逻辑,与前端进行交互。在本教程中,我们将深入探讨如何使用 Spring MVC 进行开发。 1. **Spring MVC 概述** Spring MVC 是 Spring ...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
在本实例中,"spring4MVC+Hibernate4实例(增删改查)"是一个基于Maven构建的Java Web项目,旨在演示如何整合Spring MVC和Hibernate框架来实现数据的CRUD(创建、读取、更新和删除)操作。Spring MVC是Spring框架的...
Spring 容器管理的 Bean,所以在这里 @Controller 注解起到了标识该类为 Spring MVC 控制器的作用。同时,它还暗示了该 Bean 的作用域,通常默认为 Singleton(单例)。而 @RequestMapping 注解则用来定义请求映射,...