Merge remote-tracking branch 'origin/master'
commit
47b4051a16
|
@ -32,6 +32,7 @@ public class ShiroConfig {
|
||||||
filterChainDefinitionMap.put("/img/**", "anon");
|
filterChainDefinitionMap.put("/img/**", "anon");
|
||||||
filterChainDefinitionMap.put("/druid/**", "anon");
|
filterChainDefinitionMap.put("/druid/**", "anon");
|
||||||
filterChainDefinitionMap.put("/logout", "logout");
|
filterChainDefinitionMap.put("/logout", "logout");
|
||||||
|
filterChainDefinitionMap.put("/user/register", "anon");
|
||||||
filterChainDefinitionMap.put("/", "anon");
|
filterChainDefinitionMap.put("/", "anon");
|
||||||
filterChainDefinitionMap.put("/**", "user");
|
filterChainDefinitionMap.put("/**", "user");
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@ public class ShiroConfig {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public CookieRememberMeManager rememberMeManager() {
|
public CookieRememberMeManager rememberMeManager() {
|
||||||
|
//Cookie 数据存在客户端的浏览器
|
||||||
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
|
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
|
||||||
cookieRememberMeManager.setCookie(rememberMeCookie());
|
cookieRememberMeManager.setCookie(rememberMeCookie());
|
||||||
// rememberMe cookie加密的密钥
|
// rememberMe cookie加密的密钥
|
||||||
|
|
|
@ -48,6 +48,8 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UnknownAccountException("用户名错误!");
|
throw new UnknownAccountException("用户名错误!");
|
||||||
}
|
}
|
||||||
|
//1. MD5加密不可以破解
|
||||||
|
//2. 登录比较的是,两个密文
|
||||||
if (!password.equals(user.getPwd())) {
|
if (!password.equals(user.getPwd())) {
|
||||||
throw new IncorrectCredentialsException("密码错误!");
|
throw new IncorrectCredentialsException("密码错误!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class LoginController {
|
||||||
@PostMapping("/login")
|
@PostMapping("/login")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public ResponseBo login(String username, String password, Boolean rememberMe) {
|
public ResponseBo login(String username, String password, Boolean rememberMe) {
|
||||||
|
|
||||||
password = MD5Utils.encrypt(username, password);
|
password = MD5Utils.encrypt(username, password);
|
||||||
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
|
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
|
||||||
Subject subject = SecurityUtils.getSubject();
|
Subject subject = SecurityUtils.getSubject();
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,6 +21,11 @@ public class UserService {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
public User save(User user){
|
||||||
|
return userRepository.save(user);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
public Page<User> findAll(String page, String limit){
|
public Page<User> findAll(String page, String limit){
|
||||||
Pageable pageable = PageRequest.of(Integer.parseInt(page), Integer.parseInt(limit));
|
Pageable pageable = PageRequest.of(Integer.parseInt(page), Integer.parseInt(limit));
|
||||||
Page<User> pageinfo=userRepository.findAll(pageable);
|
Page<User> pageinfo=userRepository.findAll(pageable);
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ import org.apache.shiro.crypto.hash.SimpleHash;
|
||||||
import org.apache.shiro.util.ByteSource;
|
import org.apache.shiro.util.ByteSource;
|
||||||
|
|
||||||
public class MD5Utils {
|
public class MD5Utils {
|
||||||
private static final String SALT = "mrbird";
|
private static final String SALT = "zzjava10";
|
||||||
|
|
||||||
private static final String ALGORITH_NAME = "md5";
|
private static final String ALGORITH_NAME = "md5";
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ public class MD5Utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String encrypt(String username, String pswd) {
|
public static String encrypt(String username, String pswd) {
|
||||||
|
//加盐密码
|
||||||
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT),
|
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT),
|
||||||
HASH_ITERATIONS).toHex();
|
HASH_ITERATIONS).toHex();
|
||||||
return newPassword;
|
return newPassword;
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Bootstrap 实例</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
|
||||||
|
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
|
||||||
|
<script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script>
|
||||||
|
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<h2>堆叠表单</h2>
|
||||||
|
<form>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">Email:</label>
|
||||||
|
<input type="email" class="form-control" id="email" placeholder="Enter email">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="pwd">Password:</label>
|
||||||
|
<input type="password" class="form-control" id="pwd" placeholder="Enter password">
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<label class="form-check-label">
|
||||||
|
<input class="form-check-input" name='rememberMe' type="checkbox"> Remember me
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<button type="button" id="subtn" class="btn btn-primary">Submit</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$("#subtn").click(function(){
|
||||||
|
|
||||||
|
$.post("/r/user/register", { "name": $("#email").val(),"pwd": $("#pwd").val()},
|
||||||
|
function(data){
|
||||||
|
console.log(data); //
|
||||||
|
window.location.href="index1.html";
|
||||||
|
}, "json");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue