spring mav创建和注销session
先贴上controller的代码,关于session的我用红色字体标注出来
@Controller
@RequestMapping("/admin")
@SessionAttributes("userName")
public class AdminController {
@Autowired
private AdminService adminService;
@SuppressWarnings("unused")
@RequestMapping(value="/cjyLogin",method = RequestMethod.POST)
public ModelAndView cjyLogin(@ModelAttribute("userInfoVo") UserInfo userInfo,Model model){
ModelAndView mav = new ModelAndView();
UserInfo user = adminService.getUserInfoByPrimaryKey(userInfo.getUserPhone());
if(userInfo!=null) {
if(user!=null) {
if(userInfo.getUserPwd().equals(user.getUserPwd())) {
System.out.println("++++++++++++++++++++++=============="+user.getUserName()+user.getUserPhone());
UserInfo admin = adminService.getUserInfoByPrimaryKey(userInfo.getUserPhone());//这一步是根据前 台传来的userPhone 查询用户信息
model.addAttribute("userName", admin.getUserName());//将admin.getUserName()放进session中
mav.addObject("userName", admin.getUserName());
mav.setViewName("main");
}else {
mav.setViewName("login");
mav.addObject("message", "您的密码输入有误!");
}
}else {
mav.setViewName("login");
mav.addObject("message", "没有找到该用户!");
}
}else {
mav.setViewName("login");
mav.addObject("message", "没有获得您所输入的信息!");
}
return mav;
}
@ResponseBody
@RequestMapping(value="/userList",method = RequestMethod.POST)
public List<UserInfo> userList(@ModelAttribute("userInfoVo") UserInfo userInfo) {
List<UserInfo> userList = adminService.selectAllUser();
return userList;
}
/**
* 退出登录
* @param session
* @param req
* @return
*/
@ResponseBody
@RequestMapping(value="/userQuit",method = RequestMethod.POST)
public Map<String,Object> userQuit(HttpSession session,HttpServletRequest req){
session = req.getSession();
session.invalidate();
Map<String,Object> map = new HashMap<>();
return map;
}
}
@ResponseBody //spring mvc返回json的注解
session = req.getSession();
session.invalidate(); //先获得session,再注销
至于我为什么返回一个空的map,是因为我前台用的ajax,后台要返回数据,你也可以返回一个其他的数据
前台我用${sessionScope.userName}来获取session中的值,下面贴出前台代码
<span>${sessionScope.userName}</span> //获取值
<span id="drop-out">退出</span> //点击后注销session并退出
//点击退出
$("#drop-out").click(function(){
$.ajax({
url:'${pageContext.request.contextPath}/admin/userQuit.do',// 跳转到 action
data:{},
type:'post',
cache:false,
dataType:'json',
success:function(data) {
window.location.href = '<%=basePath%>login.jsp';
},
error : function() {
// view("异常!");
alert("数据异常!");
}
});
})
这里我没用
<% session.invalidate();%>
window.location.href = '<%=basePath%>login.jsp';
来注销session,因为javascript页面中好像不管有没有触发事件都会执行<% session.invalidate();%>,
但是用ajax方式会抛出一个异常:
严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/CJY-shop] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Cannot create a session after the response has been committed] with root cause
java.lang.IllegalStateException: Cannot create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:2789)
at org.apache.catalina.connector.Request.getSession(Request.java:2170)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:895)
at org.springframework.web.context.request.ServletRequestAttributes.getSession(ServletRequestAttributes.java:111)
at org.springframework.web.context.request.ServletRequestAttributes.setAttribute(ServletRequestAttributes.java:161)
at org.springframework.web.bind.support.DefaultSessionAttributeStore.storeAttribute(DefaultSessionAttributeStore.java:55)
at org.springframework.web.method.annotation.SessionAttributesHandler.storeAttributes(SessionAttributesHandler.java:124)
at org.springframework.web.method.annotation.ModelFactory.updateModel(ModelFactory.java:230)
网上有很多copy来copy去的文章,试了以后并没有解决这个问题,其实报这个问题的原因是:
在respon关闭后还是用了session,
就是ajax回调以后,返回到前端页面,而<span>${sessionScope.userName}</span> 又使用了一遍,但这个时候是没有session的。要去除这个异常大家可以试试c:if标签,
有更好的解决方式希望大家能贴出来,非常感谢,希望能互相学习
spring mav创建和注销session相关推荐
- [Java][web]利用Spring随时随地获得Request和Session
利用Spring随时随地获得Request和Session 一.准备工作: 在web.xml中加入 <listener> <listener-class> org.spring ...
- Spring Security MVC登录注销示例教程
Spring Security MVC登录注销示例教程 今天我们将了解Spring Security Login Example.在阅读这篇文章之前,请先阅读我在"Spring 4 Secu ...
- Flask11 Session、CSRF、注销session、利用端点自动跳转
1 怎么对存储的cookie数据进行加密 利用response对象去设置cookie时,存储到浏览器中的cookie数据都是明文的,容易被一些计算机爱好者利用:利用session存的cookie数据可 ...
- 【Spring 工厂】反转控制与依赖注入、Spring工厂创建复杂对象3种方式
反转控制与依赖注入 反转控制 与 依赖注入 反转控制(IOC Inverse of Control) 依赖注入 (Dependency Injection - DI) Spring工厂创建复杂对象(3 ...
- spring bean创建过程源码分析(上)
大家好,我是@zzyang(小卓),一个热爱技术的90后.这篇文章主要是带大家了解一下spring bean的生命周期,对spring bean的创建过程源码分析.由于篇幅有限,这里说的都是主干流程, ...
- oracle有一百个人围一圈报数,案例:Oracle创建表时报session超过最大值 ORA-00018 证明递归ses...
天萃荷净 创建表时报session超过最大值 证明递归session存在并不在v$session中显示 我们在数据库的使用过程中,有时候会遇到类似情况,我会话是登录的,但是我进行某种操作,缺报sess ...
- Spring注解创建Bean的几种方式
Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...
- 在 Spring中 创建 JavaBean
2019独角兽企业重金招聘Python工程师标准>>> 在 Spring中 创建 JavaBean Spring 框架的最核心功能之一是 DI (Dependency Injecti ...
- spring cloud教程之使用spring boot创建一个应用
<7天学会spring cloud>第一天,熟悉spring boot,并使用spring boot创建一个应用. Spring Boot是Spring团队推出的新框架,它所使用的核心技术 ...
最新文章
- 使用Node.js写一个简单的api接口
- 概率主题模型简介 Introduction to Probabilistic Topic Models
- 线性结构(顺序存储和链式存储)和非线性结构的特点及区别
- leetcode1415. 长度为 n 的开心字符串中字典序第 k 小的字符串(回溯)
- linux中Python3 引入CV2报错
- Atitit 知识搜索 信息检索的方法总结 目录 1. 目录搜索	1 1.1. 向下同级搜索	1 1.2. 向上目录抽象搜索	1 2. hash搜索模式	1 2.1. 关键词搜索 主题搜索	1 2
- pycharm生成linux可执行程序,Pycharm生成可执行文件.exe的实现方法
- PFC(Power Factor Correction)功率因数校正电路
- java 锁定excel单元格格式化,JXL实现Excel单元格锁定
- matplotlib论文图片配色
- Google 创始人
- Windows 10 2018年四月更新版官方正式版
- 用决策树预测获胜球队
- 《你可以不平凡》-- 周杰伦在北京大学百年讲堂的演讲
- 使用cmd(命令提示符)打开文件磁盘或者文件夹
- CT与DR双能X射线物质识别算法实现与应用(工业选煤、稀土分拣、毒爆检测、垃圾分类等)
- WordPress插件 WP Rocket 缓存火箭加速优化插件 [更新至v2.7.4]
- win10点击任务栏图标无法最小化应用
- debug(3)--kali gnome桌面图标无法显示
- chrome谷歌浏览器怎么开启flash插件