基于用户登录注销的例子
@Controller
@SessionAttributes("loginUsername")
public class LoginController {
private static final String LOGIN_USER = "loginUser";
private static final String LOGIN_USERNAME = "loginUsername";
@RequestMapping(value="/login", method=RequestMethod.GET)
public String Login(Model model){
model.addAttribute(LOGIN_USER,new User());
return "login";
}
@RequestMapping(value="/logout", method=RequestMethod.GET)
public String Logout(HttpSession session){
if(null != session.getAttribute(LOGIN_USERNAME)){
session.invalidate();
}
return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "login";
}
...
}
登录成功后会在index.jsp上取session中的"loginUsername"值
<a href=<%=request.getContextPath() + "/logout" %> >退出登录</a>
<span><%= session.getAttribute("loginUsername")%></span>
然后"退出登录",由LoginController.Logout处理, 页面重定向到login.jsp, 以上都没问题, 但如果此时在地址栏手工输入index地址(由另一个controller处理后), 进入index.jsp, 此时发现session.getAttribute("loginUsername")仍然可以取到用户名. 断点调试确认LoginController.Logout中的session.invalidate();执行无误.可session中的对象就是不能销毁.
原因:设置了@SessionAttributes("loginUsername")
官方文档指出: The type-level @SessionAttributes annotation declares session attributes used by a specific handler. This will typically list the names of model attributes or types of model attributes which should be transparently stored in the session or some conversational storage, serving as form-backing beans between subsequent requests.
这个注解会为后面的请求保存变量在session中.
解决方法: 删除注解@SessionAttributes("loginUsername")
相关推荐
在Java Web开发中,SpringMVC是一个非常流行的MVC框架,它提供了强大的功能来构建可扩展和维护性强的Web应用程序。在SpringMVC中,拦截器(Interceptor)是一种机制,可以对请求和响应进行预处理和后处理,类似于AOP...
在这个场景中,Nginx可能被配置为反向代理,将用户的请求分发到不同的应用服务器,并且可以通过其session sticky功能,确保同一用户的请求始终被路由到同一个服务器,从而保持session一致性。 6. **Session共享实现...
标题中的“osgi session共享 支持springmvc 配置个filter即可”表明我们要讨论的是在OSGi(Open Service Gateway Initiative)环境中,如何通过Spring MVC并利用Filter来实现多个服务之间的Session共享。OSGi是一种...
例如,在拦截器的`preHandle()`方法中,检查当前请求的Session是否有效,如果发现Session已经过期,就通过`response.sendRedirect(String url)`重定向到登录页面。 在这个项目中,开发者可能已经实现了这些功能,但...
在用户首次访问服务器时,服务器会创建一个 Session 对象,并将其关联到客户端的一个特定会话。Session 中可以存储用户的登录状态、购物车信息等数据。在本案例中,你可以看到如何使用 SpringMVC 中的 SessionAware ...
在文件列表中看到的“springmvc”可能是一个包含Spring MVC配置和源代码的目录,而“新建文件夹”可能包含了具体的案例代码,比如Controller、Service、DAO、实体类(Entity)以及视图模板(如JSP或Thymeleaf文件)...
在SpringMVC3版本中,它引入了许多改进和新特性,使其成为Java Web开发中的主流选择。结合JSP(JavaServer Pages),我们可以构建用户友好的动态Web界面。以下是对SpringMVC3与JSP集成的关键知识点的详细说明: 1. ...
在SpringMVC中,通常采用以下几种方式将数据从控制器(Controller)传递到视图(View,如JSP页面): 1. **ModelAttribute:** - 在Controller方法中,通过`ModelAttribute`可以将对象添加到Model中。 - 示例: ```...
这样,当请求被处理并跳转到"hello"视图时,"message"属性的值会在JSP页面中显示。 总结起来,通过Spring MVC访问JSP页面主要涉及以下几个步骤: 1. 配置DispatcherServlet和Spring MVC的配置文件。 2. 创建@...
在Web.Config文件中配置`sessionState`元素,设置`mode`属性为`StateServer`,并指定`stateConnectionString`,这使得Session数据不在本地存储,而是通过TCP/IP连接到一个独立的State Server服务,从而避免了由于...
在SpringMVC中,DispatcherServlet是核心组件,负责调度请求到相应的处理器。 【MyBatis】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置...
Servlet、JSP和SpringMVC是Java Web开发中的三大核心技术,它们在构建动态网页和企业级应用程序中扮演着重要角色。这份"Servlet、JSP和SpringMVC初学指南源码"提供了学习这些技术的实践案例,使得初学者可以通过查看...
由于项目需求,要开发一个新闻发布模块,在网上找了找,看有没有什么插件可以用,后来发现了Ueditor百度编辑器,的确挺强大的。这里我只讲解jsp版本的,与servlet和SpringMVC整合,两种方式的应用。这里提供了纯...
通过以上步骤,我们就能完成一个基于SpringMVC、MyBatis和JSP的简单增删改查应用。这种整合方式具有良好的分层结构,有利于项目的扩展和维护。在实际开发中,还可以考虑引入其他技术,如Spring Security进行权限控制...
3. 集成SpringMVC和Hibernate:在SpringMVC的配置中,可以定义一个HibernateTemplate或使用JPA的EntityManager,以便在服务层调用数据库操作。 4. 创建业务逻辑:在Service层,使用Spring注入的Hibernate工具执行...
当遇到书籍或教程中的错误时,查看源码是一个很好的学习方法,它能帮助你理解底层工作原理,避免被误导。 总之,Servlet、JSP和SpringMVC是构建Java Web应用的重要基石。熟练掌握这些技术,能够让你在Web开发领域...
SSM项目集成Shiro搭建session共享是一个常见的需求,特别是在构建分布式系统时,为了实现用户登录状态在多个服务器间的一致性。在这个项目中,我们使用了SpringMvc4.3、Spring4.3、Mybatis3.4作为基础框架,Shiro1.4...
Spring Session 是Spring生态中的一个组件,用于管理用户会话。在分布式系统中,传统的HTTP session 面临着跨服务器共享的挑战。Spring Session 提供了一种优雅的方式来共享session数据,支持多种后端存储,包括...
其次,在登录处理的handler中,应当将session对象保存到application中,这样即使用户的会话已经超时,通过session ID依然可以在application中找到对应的session对象,进行检查。最后,当检测到session已过期时,通过...
当用户登录后,服务器会为每个会话创建一个唯一的Session ID,并将其存储在用户的Cookie中。每次用户发送请求时,都会携带这个Session ID,服务器据此识别出特定的用户会话。在Spring MVC中,可以使用HttpSession...