基于SpringBoot简单实现SpringAop+Redis+cookie 单点登录 和 用户登录检测
2018-07-17 11:01
1271 查看
一、新建一个Ascept(class )
[code]/** * 测试: Spring Aop 切面编程 * @author Administrator * */ @Aspect @EnableAspectJAutoProxy @Configuration public class TestWebAspectConfig { private CookieUtil cookieUtil = new CookieUtil(); //自定义切面规则 @Pointcut("execution(* com.qingsong.controler..*.user*(..))") /** 第一个*是切点方法的返回值类型、第二个*是controller包下所有的controller、后面是controller里以user开头的所有方法(无论方法里面有没有参数) **/ public void aspectService(){ } @Before(value="aspectService()") public void before()throws ServletException, IOException{ //获取request、response、session ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); HttpServletResponse response = requestAttributes.getResponse(); boolean ok = CookieUtil.checkCookie(request); System.out.println(ok); if (!ok) { response.sendRedirect("/redis/index");//转发到登录界面 } System.out.println("before"); } @AfterReturning(returning="result",pointcut="aspectService()") public void after(Object result) { System.out.println("result="+result); System.out.println("after"); } }
上面基本上是实现了用户登录检测功能,原理就是在用户访问的时候过aop,aop检测时需要用到用户请求时的request,这时使用 RequestContextHolder 获取 RequestContextHolder.getRequestAttributes().getRequest();(想要了解RequestContextHolder,建议了解一下SpringMVC架构)
下面是我自己定义的Cookie工具类
[code]/** * cookie 工具类 功能: 减少重复代码,获取cookie、删除cookie * @author Administrator * */ public class CookieUtil { /** * 返回一个可用的 cookie * @param request * @param response * @return */ public static Cookie getCookie(HttpServletRequest request,HttpServletResponse response) { Cookie cookie = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for(Cookie ck : cookies){ if (ck.getName().equals("JSESSIONID2")) { cookie = ck; } } } if (cookie == null) { HttpSession session = request.getSession(); if (session == null) { session = request.getSession(true); } String id = session.getId(); cookie =new Cookie("JSESSIONID2", id); } cookie.setPath("/"); cookie.setMaxAge(3600*1); cookie.setDomain("niao.com"); cookie.setHttpOnly(true); return cookie; } /** * 删除cookie * @param request * @param response * @return */ public static boolean delCookie(HttpServletRequest request,HttpServletResponse response) { boolean DELCOOKIEOK = false; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("JSESSIONID2")) { //删除cookie cookie.setPath("/"); cookie.setMaxAge(0); cookie.setDomain("niao.com"); cookie.setHttpOnly(true); response.addCookie(cookie); //删除redis中 键值对 System.out.println("注销成功"); DELCOOKIEOK = true; } } }else { DELCOOKIEOK = true; } return DELCOOKIEOK; } public static boolean checkCookie(HttpServletRequest request){ boolean CHECKCOOKIE = false; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("JSESSIONID2")) { //删除cookie CHECKCOOKIE = true; } } } return CHECKCOOKIE; } }
我这里没有使用基于 SpringBoot 的 redis 自己写了一个简易的
[code]/** * 单机部署Redis 在用户登录界面 * @author Administrator * */ public class RedisClientUtil { /** * */ private static JedisPool pool = null; //并发 private static int REDIS_CLIENT_COUNT = 0; private static Jedis jedis = null; //单点 static{ jedis = new Jedis("127.0.0.1", 6379); } /** * 设置key值 */ public static void setRedis(String jsessionId,String value) { if (jedis != null) { String a=jedis.set(jsessionId,value ); System.out.println("REDIS_CLIENT_COUNT = "+a); } } /** * 获取key值 * @param key * @return */ public static String getRedisValue(String key){ String value = null; if (jedis != null) { value = jedis.get(key); } return value; } public static void delRedisValue(String key){ if (jedis != null) { int a = Integer.parseInt(jedis.del(key).toString()); System.out.println(a); } } }
上面的功能有好多实现方法(shiro、CAS、redis+filter ...),希望这篇对大家有帮助
阅读更多相关文章推荐
- 基于注解的spring AOP简单实现
- 基于maven通过spring mvc实现简单用户登录代码下载
- java 关于Spring中Aop的简单理解以及SpringBoot如何添加Aop实现步骤
- Spring Boot & Apache CXF——简单的webservice,并实现用户验证
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于cookie-redis实现单点登录的原理浅谈
- Spring Boot / Spring MVC 入门实践 (三) : 入门项目介绍与用户注册登录的实现
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- spring boot 使用拦截器 实现 用户登录拦截
- Spring Boot 实践3 --基于spring cloud 实现微服务的简单调用
- Spring Boot实战之netty-socketio实现简单聊天室(给指定用户推送消息)
- spring -- aop基于xml的简单实现
- Spring Aop(二)——基于Aspectj注解的Aop简单实现
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展增加检查订单功能,以便记录并检测输入的参数
- 基于cookie-redis实现单点登录
- 从头认识Spring-3.4 简单的AOP日志实现-扩展增加检查订单功能,以便记录并检测输入的参数
- Spring Boot学习——AOP编程的简单实现
- Spring Boot / Spring MVC 入门实践 (三) : 入门项目介绍与用户注册登录的实现
- 防止未登录用户操作―基于struts2拦截器的简单实现