diff --git a/pom.xml b/pom.xml index 65689381f35369804ba4faf0dd9c1f47041100d3..100a2d16e8d764a3a903dd229d84c5a2a8e5f22a 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 68fe14667afaeca0a35c75d6b668fa0ed2e858cd..e42a6995367ab5aee38944c7450ba0835b000288 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,16 +40,21 @@ 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); - if (result == null) { - log.info("该用户正在存到redis中"); - stringRedisTemplate.opsForValue().set("username-"+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 7be865376a48862cea70520363f6e038b04e34fc..9f80e1b8334fd6a7dbd26598bba66eee19ae7bfd 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,30 +27,47 @@ 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)){ - 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-" + username); - log.info("从redis中取出的数据为: " + result); - if (result == null) { - log.info("未登录过"); - } else { - log.info("登陆过"); - } - } + // 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("登陆过"); + // } + // } 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 0000000000000000000000000000000000000000..6e749571edd9ec10645bf25eb0dd901133512e56 --- /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 0000000000000000000000000000000000000000..6019b86ec0bc558663c91e41bb5317e18187af41 --- /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; + } +}