參考:https://www.cnblogs.com/shihaiming/p/9565835.html
使用token鑒權需要引入依賴jar包
一、pom
<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> </dependency>
二、controller層代碼
登錄和判斷登錄
@PostMapping("/login2")
public BaseResponse<String> login2(@RequestParam String username, @RequestParam String password) {
String token = userService.doLogin2(username, password);
return BaseResultUtils.success(token);
}
@GetMapping("/isLogin2")
public BaseResponse<String> isLogin2(HttpServletRequest request){
String token = request.getHeader("token");
if (token == null) {
return BaseResultUtils.error(ERROR6);
}
String username = JWT.decode(token).getAudience().get(0);
User user = userService.getUser(username);
if (user == null) {
return BaseResultUtils.error(ERROR6);
} else {
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
try {
jwtVerifier.verify(token);
} catch (JWTVerificationException e) {
return BaseResultUtils.error(ERROR6);
}
return BaseResultUtils.success(true);
}
}
三、service層代碼
@Override public String doLogin2(String username, String password) { User user = userMapper.select(username); if (user != null && user.getPassword().equals(password)) { return user.getToken(user); } else { throw new LoginFailureException(); } }
四、model層代碼
在user類中,加入getToken方法
public String getToken(User user) { return JWT.create().withAudience(user.getUsername()) .sign(Algorithm.HMAC256(user.getPassword())); }
測試登錄,登錄成功即可返回token

測試是否登錄,傳入token即可通過鑒權

附錄:
java實現簡單登錄驗證接口,並生成一個cookie返回給前端,下一次前端請求的時候帶着cookie,就不用再登錄了
進一步來說,還可以把cookie信息存在Redis中,可以通過cookie反向查找到用戶信息
@PostMapping("/login")
public BaseResponse<String> login(@RequestParam String username, @RequestParam String password, HttpSession session, HttpServletResponse response) {
String companyId = userService.doLogin(username, password);
String sessionId = userMap.getOrDefault(username, session.getId());
session.setMaxInactiveInterval(-1);
//保存session
userMap.put(username, sessionId);
Cookie cookie = new Cookie("SESSION", sessionId);
cookie.setMaxAge(31536000);
response.addCookie(cookie);
return BaseResultUtils.success(companyId);
}
doLogin就是拿着用戶提供的賬號密碼跟數據庫中的進行比對,成功就返回,失敗還要進行第二次嘗試登錄
@Override public String doLogin(String username, String password) { User user = userMapper.select(username); if (user != null && user.getPassword().equals(password)) { return user.getCompanyId(); } else { throw new LoginFailureException(); } }
