Spring Session实战
在maven里面我们已经把这个类引入进来了,然后接下来我们写一个类,这个类是什么呢,就是UserController,因为UserController里面已经用Redis的方式实现了,实现的还是Shard分布式的,这里面为了做一个扩展,我们项目还是会用自定义的单点登陆的方式,并且这种是分布式的,为了课程讲解,我们copy一个UserController,然后只保留三个,登陆登出,获取用户信息,这三个就是存session,删session,读session,因为我们很多判断权限的地方,是直接从session里面拿的,非常简单,这个就叫UserSpringSessionController,都是用servlet提供的一个session,我们来看session是如何被Spring Session包装的,体会对业务没有侵入的session框架,现在我们来配置这个Spring Session,从第一个方面,第一个是web.xml,增加一个filter节点,<!-- spring session框架和自己实现的redis二选一 --><filter><filter-name>springSessionRepositoryFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSessionRepositoryFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>委托的过滤器代理,我们使用DelegatingFilterProxy
package com.learn.controller.portal;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.learn.common.Const;
import com.learn.common.ServerResponse;
import com.learn.pojo.User;
import com.learn.service.IUserService;/*** * @author Leon.Sun**/
@Controller
@RequestMapping("/user/springsession/")
public class UserSpringSessionController {@Autowiredprivate IUserService iUserService;/*** 用户登录* @param username* @param password* @param session* @return*/@RequestMapping(value = "login.do",method = RequestMethod.GET)@ResponseBodypublic ServerResponse<User> login(String username, String password, HttpSession session, HttpServletResponse httpServletResponse){//测试全局异常
// int i = 0;
// int j = 666/i;ServerResponse<User> response = iUserService.login(username,password);if(response.isSuccess()){session.setAttribute(Const.CURRENT_USER,response.getData());
// CookieUtil.writeLoginToken(httpServletResponse,session.getId());
// RedisShardedPoolUtil.setEx(session.getId(), JsonUtil.obj2String(response.getData()),Const.RedisCacheExtime.REDIS_SESSION_EXTIME);}return response;}@RequestMapping(value = "logout.do",method = RequestMethod.GET)@ResponseBodypublic ServerResponse<String> logout(HttpSession session,HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse){
// String loginToken = CookieUtil.readLoginToken(httpServletRequest);
// CookieUtil.delLoginToken(httpServletRequest,httpServletResponse);
// RedisShardedPoolUtil.del(loginToken);session.removeAttribute(Const.CURRENT_USER);return ServerResponse.createBySuccess();}@RequestMapping(value = "get_user_info.do",method = RequestMethod.GET)@ResponseBodypublic ServerResponse<User> getUserInfo(HttpSession session,HttpServletRequest httpServletRequest){// String loginToken = CookieUtil.readLoginToken(httpServletRequest);
// if(StringUtils.isEmpty(loginToken)){
// return ServerResponse.createByErrorMessage("用户未登录,无法获取当前用户的信息");
// }
// String userJsonStr = RedisShardedPoolUtil.get(loginToken);
// User user = JsonUtil.string2Obj(userJsonStr,User.class);User user = (User)session.getAttribute(Const.CURRENT_USER);if(user != null){return ServerResponse.createBySuccess(user);}return ServerResponse.createByErrorMessage("用户未登录,无法获取当前用户的信息");}
}
Spring Session实战相关推荐
- Spring Session实战4
然后来到Spring Session的配置文件,我们增加一个bean,id就是这个类defaultCookieSerializer,class就是org.springframework.session ...
- Spring Session实战3
我们先把nginx的节点只配置一个tomcat,首先来到我们的命令行,修改我们的happymall.com.conf 现在负载均衡两个节点,我们把第二个节点先注释上 然后reload一下./nginx ...
- Spring Session实战2
RedisHttpSessionConfiguration,就是这么一个类,那这个类里面很明显的可以看到,默认session有效期的时间是1800秒,也就是30分钟private Integer ma ...
- Spring Security 实战干货: RBAC权限控制概念的理解
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...
- Spring Security 实战:使用 JWT 认证访问接口
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读Spring Security 实战 ...
- Spring Security 实战干货:实现自定义退出登录
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 上一篇对 Spring Security 所 ...
- Spring Session快速入门
现在我们来学习一下Spring Session,这个Spring框架来实现,单点登陆,并且在实现的过程中,请小伙伴们思考一个问题,和我们原生实现的单点登陆有什么异同,我们要讲的一个目录,首先是讲解Sp ...
- 使用Spring Session和Redis解决分布式Session跨域共享问题
大家可以关注一下公众号"Java架构师秘籍" 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载 ...
- Spring Security 实战:实现自定义退出登录
1. 前言 上一篇对 Spring Security 所有内置的 Filter 进行了介绍.今天我们来实战如何安全退出应用程序. 2. 我们使用 Spring Security 登录后都做了什么 这个 ...
最新文章
- python画二维散点图-python3怎样画二维点图
- 注册DirectShow filter时应该注意中文路径
- Java Scanner 类
- 消息队列-ActiveMQ
- libmemcached安装报错
- 不定方程(质数与因数)
- Xcode7,ios9 issue ,warning合集
- 企业微信怎么删除好友 企业微信如何删除成员
- Office与Visio同事安装兼容问题
- Android中用OpenGL ES Tracer分析绘制过程
- psql执行sql的方式及一些基本命令
- 拦截器和过滤器的区别 -- 简单分析篇
- python easygui进度条_Python模块EasyGui专题学习
- 数据结构和算法——八种常用的排序算法----直接插入排序和希尔排序
- ELK logstash的grok 自带的正则匹配
- 使用开源库libyuv中替换开源汇编接口,解决汇编接口中的崩溃问题
- 关于flash强制更新:早上上班,多台电脑提示未安装flash
- 点云obb盒显示 python
- 正在找工作的同学看过来,zozo最新的java面试题总会,学会月薪3万起!!!
- 内网穿透软件对比——cpolar : 花生壳(中)