倒包:
<!-- JWT依賴(lài)--><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version></dependency>
<!-- no more than 2.3.3--><dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.3</version></dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId></dependency>
工具類(lèi):
public class JwtUtils {
private static String signKey ="yixiatech";
private static Long expire =1626662400000L;
/**
? ? * 生成JWT令牌
? ? * @param claims JWT第二部分負(fù)載 payload 中存儲(chǔ)的內(nèi)容
? ? * @return
*/
? ? public static String generateJwt(Map claims){
String jwt =Jwts.builder()
.addClaims(claims)
.signWith(SignatureAlgorithm.HS256,signKey)
.setExpiration(new Date(System.currentTimeMillis() +expire))
.compact();
return jwt;
}
/**
? ? * 解析JWT令牌
? ? * @param jwt JWT令牌
? ? * @return JWT第二部分負(fù)載 payload 中存儲(chǔ)的內(nèi)容
? ? */
? ? public static Claims parseJWT(String jwt){
Claims claims =Jwts.parser()
.setSigningKey(signKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
}
控制器代碼:
@Slf4j
@RestController
public class LoginController {
@Autowired
? ? private EmpService empService;
@PostMapping("/login")
public Result login(@RequestBody Emp emp){
Emp e =empService.login(emp);
log.info("員工登錄: {}",e);
//登錄成功,生成令牌,下發(fā)令牌
? ? ? ? if (e !=null){
Mapclaims =new HashMap<>();
claims.put("id",e.getEmpId());
claims.put("name",e.getName());
claims.put("username",e.getUsername());
String jwt =JwtUtils.generateJwt(claims);//jwt包含了當(dāng)前登錄的員工信息
? ? ? ? ? ? return Result.success(jwt);
}
//登錄失敗, 返回錯(cuò)誤信息
? ? ? ? return Result.error("用戶(hù)名或密碼錯(cuò)誤");
}
}
當(dāng)我們?cè)贔ilter類(lèi)上面加了@WebFilter注解之后,接下來(lái)我們還需要在啟動(dòng)類(lèi)上面加上一個(gè)注解@ServletComponentScan,通過(guò)這個(gè)@ServletComponentScan注解來(lái)開(kāi)啟SpringBoot項(xiàng)目對(duì)于Servlet組件的支持光稼。
具體操作的類(lèi)
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns ="/*")
public class EmpFilter implements Filter {
@Override //初始化方法, 只調(diào)用一次
? ? public void init(FilterConfig filterConfig)throws ServletException {
System.out.println("init 初始化方法執(zhí)行了");
}
@Override //攔截到請(qǐng)求之后調(diào)用, 調(diào)用多次
? ? public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException {
System.out.println("Demo 攔截到了請(qǐng)求...放行前邏輯");
chain.doFilter(request,response);
System.out.println("Demo 攔截到了請(qǐng)求...放行后邏輯");
}
@Override //銷(xiāo)毀方法, 只調(diào)用一次
? ? public void destroy() {
System.out.println("destroy 銷(xiāo)毀方法執(zhí)行了");
}
}
對(duì)象轉(zhuǎn)json
依賴(lài)
<!--fastJSON--><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version></dependency>
代碼
Result error = Result.error("NOT_LOGIN");
//手動(dòng)轉(zhuǎn)換 對(duì)象--json --------> 阿里巴巴fastJSON
String notLogin = JSONObject.toJSONString(error);