Open Source IDS Tools: Comparing Suricata, Snort, Bro (Zeek), Linux
阿新 • • 發佈:2021-12-30
1、引入依賴
<!--引入jwt--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.18.2</version> </dependency>
2、建立JWTUtils工具類
package com.csp.springbootjwt.utils;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import java.util.Calendar; import java.util.Map; public class JWTUtils { //簽名金鑰 private static final String SIGNKEY = "!@#$%QWER123456121234521";/** * 生成token * header.payload.signature */ public static String getToken(Map<String,String> map){ Calendar instance = Calendar.getInstance(); instance.add(Calendar.DATE,15); //建立JWTBuilder JWTCreator.Builder builder = JWT.create(); //Payload配置map.forEach((k,v)->{ builder.withClaim(k, v); }); String token = builder.withExpiresAt(instance.getTime()) //過期時間設定 .sign(Algorithm.HMAC256(SIGNKEY));//簽名 return token; } /** * 驗證 token 合法性 */ public static DecodedJWT verifyToken(String token){ //驗證合法性 DecodedJWT verify = JWT.require(Algorithm.HMAC256(SIGNKEY)).build().verify(token); return verify; } }
3、建立系統攔截處理類
package com.csp.springbootjwt.config; import com.auth0.jwt.exceptions.AlgorithmMismatchException; import com.auth0.jwt.exceptions.SignatureVerificationException; import com.auth0.jwt.exceptions.TokenExpiredException; import com.csp.springbootjwt.utils.JWTUtils; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; public class JWTInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Map<String,Object> map = new HashMap<>(); //獲取請求頭中的令牌 String token = request.getHeader("token"); try { //驗證令牌 JWTUtils.verifyToken(token); //驗證通過,放行請求 return true; } catch (SignatureVerificationException e) { e.printStackTrace(); map.put("msg", "無效簽名"); }catch (TokenExpiredException e){ e.printStackTrace(); map.put("msg", "token已過期"); }catch (AlgorithmMismatchException e){ e.printStackTrace(); map.put("msg", "token演算法不一致"); }catch (Exception e){ e.printStackTrace(); map.put("msg", "token無效"); } //設定狀態 map.put("state",false); //採用jackson方式將map轉化為json 字串 String json = new ObjectMapper().writeValueAsString(map); response.setContentType("application/json;charset=UTF-8"); response.getWriter().println(json); return false; } }
4、建立系統攔截器
package com.csp.springbootjwt.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new JWTInterceptor()) .addPathPatterns("/**") //.excludePathPatterns("/user/**"); //.addPathPatterns("/test1") .excludePathPatterns("/login"); //.excludePathPatterns("/**"); } }
5、登入驗證及業務處理
package com.csp.springbootjwt.Controller; import com.auth0.jwt.interfaces.DecodedJWT; import com.csp.springbootjwt.entity.User; import com.csp.springbootjwt.service.UserService; import com.csp.springbootjwt.utils.JWTUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/login") public Map<String, Object> login(User user){ Map<String,Object> map = new HashMap<>(); System.out.println(user); try{ User userDB = userService.login(user); map.put("state",true); map.put("msg","認證成功"); //返回Token Map<String,String> payloadMap = new HashMap<>(); payloadMap.put("id",new Integer(userDB.getId()).toString()); payloadMap.put("username",userDB.getUsername()); String token = JWTUtils.getToken(payloadMap); map.put("token",token); } catch (Exception e){ map.put("state",false); map.put("msg", e.getMessage()); } return map; } @PostMapping("/test1") public Map<String,Object> test(HttpServletRequest request){ String token = request.getHeader("token"); DecodedJWT verify = JWTUtils.verifyToken(token); String id = verify.getClaim("id").toString(); String username = verify.getClaim("username").toString(); Map<String,Object> map = new HashMap<>(); //處理業務邏輯 map.put("state", true); map.put("msg", "請求成功。業務處理,"); map.put("id", id); map.put("username", username); return map; } }