From fb17076f27c9bbeed61b248ef21218f6714b8c10 Mon Sep 17 00:00:00 2001 From: mark <1453537503@qq.com> Date: Thu, 22 Aug 2019 08:44:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=88=9B=E5=BB=BAshiro=E5=88=86=E6=94=AF?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AdminController.java | 15 ++++++++--- .../interceptor/SessionInterceptor.java | 26 ++++++++++++++++--- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/mark/springboot/controller/AdminController.java b/src/main/java/com/mark/springboot/controller/AdminController.java index 68fe146..35e7cdb 100644 --- a/src/main/java/com/mark/springboot/controller/AdminController.java +++ b/src/main/java/com/mark/springboot/controller/AdminController.java @@ -10,7 +10,9 @@ import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -38,14 +40,19 @@ public class AdminController { } @PostMapping("login") - public Result login(@RequestBody LoginRequest loginRequest, HttpServletRequest request) { + public Result login(@RequestBody LoginRequest loginRequest, HttpServletResponse response) { + String username = loginRequest.getUsername(); + //存cookie + Cookie cookie = new Cookie("username", username); + cookie.setValue(username); + response.addCookie(cookie); + if (adminService.login(loginRequest)) { //存到redis中 - String username = loginRequest.getUsername(); - Object result = stringRedisTemplate.opsForValue().get("username-"+username); + Object result = stringRedisTemplate.opsForValue().get("username"); if (result == null) { log.info("该用户正在存到redis中"); - stringRedisTemplate.opsForValue().set("username-"+username, username); + stringRedisTemplate.opsForValue().set("username", username); log.info("redis存储结束"); } return Result.ok("登录成功"); diff --git a/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java b/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java index 7be8653..cf97ce2 100644 --- a/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java +++ b/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java @@ -11,8 +11,11 @@ import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; +import javax.annotation.Resource; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; /** * @Author: MARK @@ -24,12 +27,29 @@ import javax.servlet.http.HttpServletResponse; @Component public class SessionInterceptor implements HandlerInterceptor { - @Autowired + @Resource private StringRedisTemplate stringRedisTemplate; public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String uri = request.getRequestURI(); - if("/admin/login".equals(uri)){ + //取cookie + Cookie[] cookies = request.getCookies(); + log.info("拦截器中cookie信息: " + cookies); + if (cookies != null && cookies.length > 0) { + for (Cookie cookie : cookies) { + log.info("cookie.name = " + cookie.getName()); + log.info("cookie.value = " + cookie.getValue()); + if (cookie.getName().equals("username")) { + log.info("拿到cookie中数据: " + cookie.getValue()); + return true; + } + } + + } + // HttpSession session = request.getSession(); + // Object sessionUsername = session.getAttribute("username"); + // log.info("从session中获取的username" + sessionUsername); + if ("/admin/login".equals(uri)) { RequestWrapper requestWrapper = new RequestWrapper(request); String body = requestWrapper.getBody(); log.info("body: " + body); @@ -40,7 +60,7 @@ public class SessionInterceptor implements HandlerInterceptor { log.info("用户名" + username); //从redis读取数据 log.info("intercept从redis读取数据"); - String result = stringRedisTemplate.opsForValue().get("username-" + username); + String result = stringRedisTemplate.opsForValue().get("username"); log.info("从redis中取出的数据为: " + result); if (result == null) { log.info("未登录过"); -- Gitee From da62321c9fbdd217793e31cd8ef5df7944b10fce Mon Sep 17 00:00:00 2001 From: mark <1453537503@qq.com> Date: Thu, 22 Aug 2019 09:19:15 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=89=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E5=99=A8=E9=80=BB=E8=BE=91=E5=92=8Ccontroller?= =?UTF-8?q?=E4=B8=ADredis=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ++ .../controller/AdminController.java | 12 ++-- .../interceptor/SessionInterceptor.java | 68 +++++++++---------- .../mark/springboot/shiro/ShiroConfig.java | 56 +++++++++++++++ .../com/mark/springboot/shiro/UserRealm.java | 28 ++++++++ 5 files changed, 131 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/mark/springboot/shiro/ShiroConfig.java create mode 100644 src/main/java/com/mark/springboot/shiro/UserRealm.java diff --git a/pom.xml b/pom.xml index 6568938..100a2d1 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,13 @@ spring-boot-starter-data-redis + + + org.apache.shiro + shiro-spring + 1.4.0 + + diff --git a/src/main/java/com/mark/springboot/controller/AdminController.java b/src/main/java/com/mark/springboot/controller/AdminController.java index 35e7cdb..e42a699 100644 --- a/src/main/java/com/mark/springboot/controller/AdminController.java +++ b/src/main/java/com/mark/springboot/controller/AdminController.java @@ -49,12 +49,12 @@ public class AdminController { if (adminService.login(loginRequest)) { //存到redis中 - Object result = stringRedisTemplate.opsForValue().get("username"); - if (result == null) { - log.info("该用户正在存到redis中"); - stringRedisTemplate.opsForValue().set("username", username); - log.info("redis存储结束"); - } + // Object result = stringRedisTemplate.opsForValue().get("username"); + // if (result == null) { + // log.info("该用户正在存到redis中"); + // stringRedisTemplate.opsForValue().set("username", username); + // log.info("redis存储结束"); + // } return Result.ok("登录成功"); } return Result.fail("登录失败"); diff --git a/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java b/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java index cf97ce2..9f80e1b 100644 --- a/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java +++ b/src/main/java/com/mark/springboot/interceptor/SessionInterceptor.java @@ -31,43 +31,43 @@ public class SessionInterceptor implements HandlerInterceptor { private StringRedisTemplate stringRedisTemplate; public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String uri = request.getRequestURI(); - //取cookie - Cookie[] cookies = request.getCookies(); - log.info("拦截器中cookie信息: " + cookies); - if (cookies != null && cookies.length > 0) { - for (Cookie cookie : cookies) { - log.info("cookie.name = " + cookie.getName()); - log.info("cookie.value = " + cookie.getValue()); - if (cookie.getName().equals("username")) { - log.info("拿到cookie中数据: " + cookie.getValue()); - return true; - } - } - - } + // String uri = request.getRequestURI(); + // //取cookie + // Cookie[] cookies = request.getCookies(); + // log.info("拦截器中cookie信息: " + cookies); + // if (cookies != null && cookies.length > 0) { + // for (Cookie cookie : cookies) { + // log.info("cookie.name = " + cookie.getName()); + // log.info("cookie.value = " + cookie.getValue()); + // if (cookie.getName().equals("username")) { + // log.info("拿到cookie中数据: " + cookie.getValue()); + // return true; + // } + // } + // + // } // HttpSession session = request.getSession(); // Object sessionUsername = session.getAttribute("username"); // log.info("从session中获取的username" + sessionUsername); - if ("/admin/login".equals(uri)) { - RequestWrapper requestWrapper = new RequestWrapper(request); - String body = requestWrapper.getBody(); - log.info("body: " + body); - log.info("stringRedisTemplate: " + stringRedisTemplate); - //json转对象 - LoginRequest loginRequest = JSON.parseObject(body, LoginRequest.class); - String username = loginRequest.getUsername(); - log.info("用户名" + username); - //从redis读取数据 - log.info("intercept从redis读取数据"); - String result = stringRedisTemplate.opsForValue().get("username"); - log.info("从redis中取出的数据为: " + result); - if (result == null) { - log.info("未登录过"); - } else { - log.info("登陆过"); - } - } + // if ("/admin/login".equals(uri)) { + // RequestWrapper requestWrapper = new RequestWrapper(request); + // String body = requestWrapper.getBody(); + // log.info("body: " + body); + // log.info("stringRedisTemplate: " + stringRedisTemplate); + // //json转对象 + // LoginRequest loginRequest = JSON.parseObject(body, LoginRequest.class); + // String username = loginRequest.getUsername(); + // log.info("用户名" + username); + // //从redis读取数据 + // log.info("intercept从redis读取数据"); + // String result = stringRedisTemplate.opsForValue().get("username"); + // log.info("从redis中取出的数据为: " + result); + // if (result == null) { + // log.info("未登录过"); + // } else { + // log.info("登陆过"); + // } + // } return true; } diff --git a/src/main/java/com/mark/springboot/shiro/ShiroConfig.java b/src/main/java/com/mark/springboot/shiro/ShiroConfig.java new file mode 100644 index 0000000..6e74957 --- /dev/null +++ b/src/main/java/com/mark/springboot/shiro/ShiroConfig.java @@ -0,0 +1,56 @@ +package com.mark.springboot.shiro; + +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: MARK + * @Date: 2019/8/22 08:05 + * @Version: 1.0.0 + * @Description: Shiro配置类 + */ +@Configuration +public class ShiroConfig { + /** + * @return + * @create: 2019/8/22 + * @author MARK + * @Description: 创建ShiroFilterFactory + */ + public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultSecurityManager securityManager){ + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + + //设置安全管理器 + shiroFilterFactoryBean.setSecurityManager(securityManager); + return shiroFilterFactoryBean; + } + + /** + * @return + * @create: 2019/8/22 + * @author MARK + * @Description: 创建DefaultWebSecurityManager + */ + @Bean(name = "securityManager") + public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){ + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + //关联Realm + securityManager.setRealm(userRealm); + return securityManager; + } + + /** + * @return + * @create: 2019/8/22 + * @author MARK + * @Description: 创建Realm 放入spring中 + */ + @Bean(name = "userRealm") + public UserRealm userRealm(){ + return new UserRealm(); + } +} diff --git a/src/main/java/com/mark/springboot/shiro/UserRealm.java b/src/main/java/com/mark/springboot/shiro/UserRealm.java new file mode 100644 index 0000000..6019b86 --- /dev/null +++ b/src/main/java/com/mark/springboot/shiro/UserRealm.java @@ -0,0 +1,28 @@ +package com.mark.springboot.shiro; + +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; + +/** + * @Author: MARK + * @Date: 2019/8/22 08:07 + * @Version: 1.0.0 + * @Description: 自定义Realm + */ +public class UserRealm extends AuthorizingRealm { + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + System.out.println("执行授权逻辑"); + return null; + } + + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + System.out.println("执行认证逻辑"); + return null; + } +} -- Gitee