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