diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroConfig.java b/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroConfig.java index b7546ff..8d489bd 100644 --- a/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroConfig.java +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroConfig.java @@ -32,6 +32,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/img/**", "anon"); filterChainDefinitionMap.put("/druid/**", "anon"); filterChainDefinitionMap.put("/logout", "logout"); + filterChainDefinitionMap.put("/user/register", "anon"); filterChainDefinitionMap.put("/", "anon"); filterChainDefinitionMap.put("/**", "user"); @@ -76,6 +77,7 @@ public class ShiroConfig { * @return */ public CookieRememberMeManager rememberMeManager() { + //Cookie 数据存在客户端的浏览器 CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); cookieRememberMeManager.setCookie(rememberMeCookie()); // rememberMe cookie加密的密钥 diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroRealm.java b/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroRealm.java index 50de722..c8e5bff 100644 --- a/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroRealm.java +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/config/ShiroRealm.java @@ -48,6 +48,8 @@ public class ShiroRealm extends AuthorizingRealm { if (user == null) { throw new UnknownAccountException("用户名错误!"); } + //1. MD5加密不可以破解 + //2. 登录比较的是,两个密文 if (!password.equals(user.getPwd())) { throw new IncorrectCredentialsException("密码错误!"); } diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/controller/LoginController.java b/SpringBootShiroRememberMe/src/main/java/com/zz/controller/LoginController.java index b971264..4b97ffb 100644 --- a/SpringBootShiroRememberMe/src/main/java/com/zz/controller/LoginController.java +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/controller/LoginController.java @@ -30,6 +30,7 @@ public class LoginController { @PostMapping("/login") @ResponseBody public ResponseBo login(String username, String password, Boolean rememberMe) { + password = MD5Utils.encrypt(username, password); UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); Subject subject = SecurityUtils.getSubject(); diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/controller/UserController.java b/SpringBootShiroRememberMe/src/main/java/com/zz/controller/UserController.java new file mode 100644 index 0000000..4cd34a8 --- /dev/null +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/controller/UserController.java @@ -0,0 +1,65 @@ +package com.zz.controller; + +import javax.annotation.Resource; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.LockedAccountException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.zz.entity.User; +import com.zz.pojo.ResponseBo; +import com.zz.service.UserService; +import com.zz.util.KeyUtil; +import com.zz.util.MD5Utils; + + +@Controller +@RequestMapping("user") +public class UserController { + @Resource + UserService userService; + + @GetMapping("/register") + public String login() { + return "register.html"; + } + + @PostMapping("/register") + @ResponseBody + public ResponseBo register(User user) { + + String password = MD5Utils.encrypt(user.getName(), user.getPwd()); + user.setPwd(password); + user.setId(KeyUtil.genUniqueKey()); + userService.save(user); + return ResponseBo.ok(); + } + + @RequestMapping("/") + public String redirectIndex() { + return "redirect:/index"; + } + + @RequestMapping("/index") + public String index(Model model) { + User user = (User) SecurityUtils.getSubject().getPrincipal(); + model.addAttribute("user", user); + return "index1.html"; + } + + @PostMapping("/getlogin") + @ResponseBody + public User getLoginUser(){ + return (User) SecurityUtils.getSubject().getPrincipal(); + } +} \ No newline at end of file diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/service/UserService.java b/SpringBootShiroRememberMe/src/main/java/com/zz/service/UserService.java index 9d3dc93..4a0d296 100644 --- a/SpringBootShiroRememberMe/src/main/java/com/zz/service/UserService.java +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/service/UserService.java @@ -21,6 +21,11 @@ public class UserService { }; + public User save(User user){ + return userRepository.save(user); + }; + + public Page findAll(String page, String limit){ Pageable pageable = PageRequest.of(Integer.parseInt(page), Integer.parseInt(limit)); Page pageinfo=userRepository.findAll(pageable); diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/util/KeyUtil.java b/SpringBootShiroRememberMe/src/main/java/com/zz/util/KeyUtil.java new file mode 100644 index 0000000..5a65602 --- /dev/null +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/util/KeyUtil.java @@ -0,0 +1,16 @@ +package com.zz.util; +import java.util.Random; +public class KeyUtil { + + /** + * 生成唯一的主键 + * 格式: 时间+随机数 + * @return + */ + public static String genUniqueKey() { + Random random = new Random(); + Integer number = random.nextInt(900000) + 100000; + + return System.currentTimeMillis() + String.valueOf(number); + } +} diff --git a/SpringBootShiroRememberMe/src/main/java/com/zz/util/MD5Utils.java b/SpringBootShiroRememberMe/src/main/java/com/zz/util/MD5Utils.java index 8189e55..b95fb76 100644 --- a/SpringBootShiroRememberMe/src/main/java/com/zz/util/MD5Utils.java +++ b/SpringBootShiroRememberMe/src/main/java/com/zz/util/MD5Utils.java @@ -4,7 +4,7 @@ import org.apache.shiro.crypto.hash.SimpleHash; import org.apache.shiro.util.ByteSource; public class MD5Utils { - private static final String SALT = "mrbird"; + private static final String SALT = "zzjava10"; private static final String ALGORITH_NAME = "md5"; @@ -16,6 +16,7 @@ public class MD5Utils { } public static String encrypt(String username, String pswd) { + //加盐密码 String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT), HASH_ITERATIONS).toHex(); return newPassword; diff --git a/SpringBootShiroRememberMe/src/main/resources/static/register.html b/SpringBootShiroRememberMe/src/main/resources/static/register.html new file mode 100644 index 0000000..9f1074c --- /dev/null +++ b/SpringBootShiroRememberMe/src/main/resources/static/register.html @@ -0,0 +1,47 @@ + + + + Bootstrap 实例 + + + + + + + + + +
+

堆叠表单

+
+
+ + +
+
+ + +
+
+ +
+ +
+
+ + + \ No newline at end of file