SpringBoot与JWT
Demo
项目结构
![jwt](/assets/security-jwt-sp-4028da56.png)
项目源码
package com.supremepole.c02springbootjwt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
public class C02SpringBootJwtApplication {
public static void main(String[] args) {
SpringApplication.run(C02SpringBootJwtApplication.class, args);
}
}
package com.supremepole.c02springbootjwt;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@RestController
public class JwtController {
@PostMapping("/get")
public String creatToken(){
User user = new User();
user.setId("1");
user.setUsername("SupremePole");
user.setPassword("https://cs.supremepole.com");
return JwtUtil.createJWT(40000,user);
}
@PostMapping("/test")
public String testToken(HttpServletRequest request, HttpServletResponse response){
String token= request.getHeader("Authorization");
User user = new User();
user.setId("1");
user.setUsername("SupremePole");
user.setPassword("https://cs.supremepole.com");
if (JwtUtil.isVerify(token,user)){
return "success";
}
return "fail";
}
}
package com.supremepole.c02springbootjwt;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(urlPatterns = "/testToken", filterName = "jwtFilter")
public class JwtFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
response.setHeader("Access-Control-Allow-Origin", "*");
String token= request.getHeader("Authorization");
User user = new User();
user.setId("1");
user.setUsername("SupremePole");
user.setPassword("https://cs.supremepole.com");
boolean flag = JwtUtil.isVerify(token,user);
if (flag){
filterChain.doFilter(servletRequest,servletResponse);
}else {
System.out.println("失败。。。。。。。。");
response.getWriter().write("失败。。。。。。。。");
}
}
@Override
public void destroy() {
}
}
package com.supremepole.c02springbootjwt;
import io.jsonwebtoken.*;
import org.springframework.beans.factory.annotation.Value;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class JwtUtil {
public static String createJWT(long ttlMillis, User user) {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
Map<String, Object> claims = new HashMap<String, Object>();
claims.put("id", user.getId());
claims.put("username", user.getUsername());
claims.put("password", user.getPassword());
String key = user.getPassword();
String subject = user.getUsername();
JwtBuilder builder = Jwts.builder()
.setClaims(claims)
.setId(UUID.randomUUID().toString())
.setIssuedAt(now)
.setSubject(subject)
.signWith(signatureAlgorithm, key);
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
public static Claims parseJWT(String token, User user) {
String key = user.getPassword();
Claims claims = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token).getBody();
return claims;
}
public static Boolean isVerify(String token, User user) {
String key = user.getPassword();
try {
Claims claims = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token).getBody();
if (claims.get("password").equals(user.getPassword())) {
return true;
}
}catch (ExpiredJwtException e){
e.printStackTrace();
}
return false;
}
}
package com.supremepole.c02springbootjwt;
public class User {
private String id;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}