Browse Source

feat:权限系统新增SYS权限(用于其它系统访问

sky 5 years ago
parent
commit
cc564f9485

+ 1 - 1
seec-data-server/src/main/java/cn/seecoder/data/server/controller/EvaluateController.java

@@ -37,7 +37,7 @@ public class EvaluateController {
         return root;
     }
 
-    @Auth(roles = {UserRole.ADMIN})
+    @Auth(roles = {UserRole.SYS})
     @RequestMapping("/eval/analysis/{examId}")
     public Result<Map<String, Map<String,Double>>> evalAnalysisByExamId(@PathVariable("examId") Integer examId) {
         Map<String, Map<String, Double>> res = evaluateService.analyzeEvalTest(examId);

+ 18 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/utils/aspects/auth/AuthHandlerAspectJ.java

@@ -32,6 +32,9 @@ public class AuthHandlerAspectJ {
     @Value("${jwt.secret}")
     private String jwtSecret;
 
+    @Value("${jwt.sys-secret}")
+    private String jwtSysSecret;
+
     @Before("execution(public * cn.seecoder.data.server.controller.*.*(..)) && @annotation(auth)")
     public void authCheck(JoinPoint joinPoint, Auth auth) {
         HttpServletRequest httpServletRequest =
@@ -40,10 +43,25 @@ public class AuthHandlerAspectJ {
         String token = Optional.ofNullable(httpServletRequest.getHeader("Authorization"))
                 .orElseThrow(() -> new GlobalException(ErrorCodeEnum.USER_ERROR_A0001));
 
+
+
         JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(jwtSecret)).build();
+        JWTVerifier jwtVerifierSys = JWT.require(Algorithm.HMAC256(jwtSysSecret)).build();
 
         DecodedJWT decodedJWT;
 
+
+        // token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJza3kiOiJXb0JpU2hlWWFvWGllQnVXYW5MZSEhIn0.QDF9l3beb2vodPMH87adsT4DZL60NU6Zf4uYAxelzg8
+        for(UserRole role : auth.roles()) {
+            if(role == UserRole.SYS) {
+                try {
+                    decodedJWT = jwtVerifierSys.verify(token);
+                    String decodedString = decodedJWT.getClaim("sky").asString();
+                    if (decodedString.equals("WoBiSheYaoXieBuWanLe!!")) return;
+                } catch (JWTVerificationException ignored) {}
+            }
+        }
+
         try {
             decodedJWT = jwtVerifier.verify(token);
         } catch (JWTVerificationException e) {

+ 5 - 1
seec-data-server/src/main/java/cn/seecoder/data/server/utils/enums/UserRole.java

@@ -12,5 +12,9 @@ public enum UserRole {
     /**
      * 管理员
      */
-    ADMIN
+    ADMIN,
+    /**
+     * 内部系统
+     * */
+    SYS
 }

+ 1 - 0
seec-data-server/src/main/resources/application.yml

@@ -17,3 +17,4 @@ logging:
     path: logs
 jwt:
   secret: 'SEEC-1919810-OIDC-114514'
+  sys-secret: '114514-OIDC-1919810-SEEC-ANALYSIS'

+ 0 - 5
seec-data-server/src/test/java/cn/seecoder/data/server/schedule/EvaluateScheduleTest.java

@@ -27,11 +27,6 @@ public class EvaluateScheduleTest {
     @Autowired
     private EvaluateSchedule evaluateSchedule;
 
-    @Test
-    public void testAspectJExtraction() {
-        evaluateSchedule.testEvaluateDataExtraction();
-    }
-
 //    @Test
 //    void evaluateDataExtrationTest() {
 //        EvaluateSchedule evaluateSchedule = new EvaluateSchedule(generalRecordRepository,evaluateRepository);

+ 29 - 0
seec-data-server/src/test/java/cn/seecoder/data/server/utils/aspects/auth/AuthHandlerAspectJTest.java

@@ -0,0 +1,29 @@
+package cn.seecoder.data.server.utils.aspects.auth;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class AuthHandlerAspectJTest {
+
+    @Test
+    public void authCheck() {
+        final String secret = "114514-OIDC-1919810-SEEC-ANALYSIS"; // 目的是加盐,内容随意
+
+        JWTVerifier verifier;
+
+        Algorithm algorithm = Algorithm.HMAC256(secret);
+        String token = JWT.create().withClaim("sky", "WoBiSheYaoXieBuWanLe!!").sign(algorithm); // 创建token
+
+        DecodedJWT jwt = null;
+        verifier = JWT.require(algorithm).build(); //Reusable verifier instance
+        jwt = verifier.verify(token);
+        String sky = jwt.getClaims().get("sky").asString();
+
+        assertEquals("WoBiSheYaoXieBuWanLe!!", sky);
+    }
+}