Browse Source

update jboot version 1.4.6,update shiro + jwt

Rlax 7 years ago
parent
commit
b63b4bf2ed

+ 1 - 1
README.md

@@ -15,7 +15,7 @@
 
 ### 技术选型
 
- - 核心框架:jboot 1.4.4/jfinal 3.3
+ - 核心框架:jboot 1.4.6/jfinal 3.3
  - 模版引擎:jfinal enjoy
  - 注册中心:consul/zookeeper
  - RPC:motan/dubbo

+ 4 - 23
jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/jwt/shiro/JwtAuthenticationToken.java

@@ -2,8 +2,6 @@ package io.jboot.admin.base.plugin.jwt.shiro;
 
 import org.apache.shiro.authc.AuthenticationToken;
 
-import java.util.List;
-
 /**
  * jwt shiro token
  * @author Rlax
@@ -17,11 +15,10 @@ public class JwtAuthenticationToken implements AuthenticationToken {
     /** token */
     private String token;
 
-    /** 角色 */
-    private List<String> roles;
-
-    /** 权限 */
-    private List<String> permissions;
+    public JwtAuthenticationToken(String userId, String token) {
+        this.userId = userId;
+        this.token = token;
+    }
 
     @Override
     public Object getPrincipal() {
@@ -40,20 +37,4 @@ public class JwtAuthenticationToken implements AuthenticationToken {
     public void setToken(String token) {
         this.token = token;
     }
-
-    public List<String> getRoles() {
-        return roles;
-    }
-
-    public void setRoles(List<String> roles) {
-        this.roles = roles;
-    }
-
-    public List<String> getPermissions() {
-        return permissions;
-    }
-
-    public void setPermissions(List<String> permissions) {
-        this.permissions = permissions;
-    }
 }

+ 0 - 35
jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/jwt/shiro/JwtShiroAuthzBridge.java

@@ -1,35 +0,0 @@
-package io.jboot.admin.base.plugin.jwt.shiro;
-
-import com.jfinal.core.Controller;
-import io.jboot.component.jwt.JwtShiroBridge;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.subject.Subject;
-
-import java.util.Map;
-
-/**
- * jwt shiro bridge
- * @author Rlax
- *
- */
-public class JwtShiroAuthzBridge implements JwtShiroBridge {
-
-    private final static String USER_ID = "userId";
-    private final static String ROLES = "ROLE_LIST";
-    private final static String PERMISSIONS = "PERMISSIONS";
-
-    @Override
-    public Subject buildSubject(Map jwtParas, Controller controller) {
-        String userId = (String) jwtParas.get(USER_ID);
-
-        JwtAuthenticationToken token = new JwtAuthenticationToken();
-        token.setUserId(userId);
-        token.setToken(userId);
-
-        Subject subject = SecurityUtils.getSubject();
-        subject.login(token);
-
-        return subject;
-    }
-
-}

+ 2 - 0
jboot-admin-service/jboot-admin-service-provider/src/main/resources/jboot.properties

@@ -68,6 +68,8 @@ jboot.model.scan
 jboot.model.hystrixEnable=true
 #1000 * 30; //单位:毫秒
 jboot.model.hystrixTimeout=30000
+jboot.model.columnCreated=createdate
+jboot.model.columnModified=lastUpdTime
 #---------------------------------------------------------------------------------#
 
 #---------------------------------------------------------------------------------#

+ 94 - 0
jboot-b2c/src/main/java/io/jboot/b2c/support/JwtShiroInvokeListener.java

@@ -0,0 +1,94 @@
+package io.jboot.b2c.support;
+
+import com.jfinal.core.Controller;
+import com.jfinal.log.Log;
+import io.jboot.admin.base.common.RestResult;
+import io.jboot.admin.base.plugin.jwt.shiro.JwtAuthenticationToken;
+import io.jboot.component.jwt.JwtManager;
+import io.jboot.component.shiro.JbootShiroInvokeListener;
+import io.jboot.component.shiro.processer.AuthorizeResult;
+import io.jboot.utils.StringUtils;
+import io.jboot.web.controller.JbootController;
+import io.jboot.web.fixedinterceptor.FixedInvocation;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.subject.Subject;
+
+import java.util.Map;
+
+/**
+ * jwt shiro listener
+ * @author Rlax
+ *
+ */
+public class JwtShiroInvokeListener implements JbootShiroInvokeListener {
+
+    private final static Log log = Log.getLog(JwtShiroInvokeListener.class);
+
+    @Override
+    public void onInvokeBefore(FixedInvocation inv) {
+        JbootController controller = (JbootController) inv.getController();
+        String jwtToken = controller.getHeader(JwtManager.me().getHttpHeaderName());
+
+        if (StringUtils.isBlank(jwtToken)) {
+            inv.invoke();
+            return;
+        }
+
+        Map jwtParas = JwtManager.me().getParas();
+        String userId = String.valueOf(jwtParas.get("userId"));
+
+        AuthenticationToken token = new JwtAuthenticationToken(userId, jwtToken);
+
+        try {
+            Subject subject = SecurityUtils.getSubject();
+            subject.login(token);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+    }
+
+    @Override
+    public void onInvokeAfter(FixedInvocation inv, AuthorizeResult result) {
+        if (result == null || result.isOk()) {
+            inv.invoke();
+            return;
+        }
+
+        int errorCode = result.getErrorCode();
+        switch (errorCode) {
+            case AuthorizeResult.ERROR_CODE_UNAUTHENTICATED:
+                doProcessUnauthenticated(inv.getController());
+                break;
+            case AuthorizeResult.ERROR_CODE_UNAUTHORIZATION:
+                doProcessuUnauthorization(inv.getController());
+            break;
+            default:
+                doProcessuDefault(inv.getController());
+        }
+    }
+
+    /**
+     * 其他处理
+     * @param controller
+     */
+    private void doProcessuDefault(Controller controller) {
+        controller.renderJson(RestResult.buildError("404"));
+    }
+
+    /**
+     * 没有认证信息处理
+     * @param controller
+     */
+    private void doProcessUnauthenticated(Controller controller) {
+        controller.renderJson(RestResult.buildError("401"));
+    }
+
+    /**
+     * 无授权信息处理
+     * @param controller
+     */
+    private void doProcessuUnauthorization(Controller controller) {
+        controller.renderJson(RestResult.buildError("403"));
+    }
+}

+ 4 - 1
jboot-b2c/src/main/resources/jboot.properties

@@ -102,9 +102,12 @@ jboot.mq.redis.database=0
 #---------------------------------------------------------------------------------#
 
 #---------------------------------------------------------------------------------#
+jboot.shiro.invokeListener=io.jboot.b2c.support.JwtShiroInvokeListener
+#---------------------------------------------------------------------------------#
+
+#---------------------------------------------------------------------------------#
 jboot.web.jwt.httpHeaderName=Jwt
 jboot.web.jwt.secret=wtSB6bFrfJWLBmfhtyJbpF1L17F7XrGX
 # 60 * 60 * 24 * 7 * 1000
 jboot.web.jwt.validityPeriod=604800000
-jboot.web.jwt.jwtShiroBridge=io.jboot.admin.base.plugin.jwt.shiro.JwtShiroAuthzBridge
 #---------------------------------------------------------------------------------#

+ 1 - 1
pom.xml

@@ -13,7 +13,7 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <jboot.version>1.4.4</jboot.version>
+        <jboot.version>1.4.6</jboot.version>
         <slf4j-log4j12.version>1.7.25</slf4j-log4j12.version>
         <logback.version>1.1.11</logback.version>
     </properties>