diff --git a/plugin.xml b/plugin.xml index 4288b6b..3a9567c 100644 --- a/plugin.xml +++ b/plugin.xml @@ -5,10 +5,11 @@ yes 1.0 10.0 - 2018-11-20 + 2019-06-18 author [2018-11-05]初始化插件。
]]>
diff --git a/src/main/java/com/fr/plugin/demo/request/DemoGlobalRequestFilterBridge.java b/src/main/java/com/fr/plugin/demo/request/DemoGlobalRequestFilterBridge.java index 9d0114b..3a31242 100644 --- a/src/main/java/com/fr/plugin/demo/request/DemoGlobalRequestFilterBridge.java +++ b/src/main/java/com/fr/plugin/demo/request/DemoGlobalRequestFilterBridge.java @@ -8,7 +8,9 @@ import com.fr.decision.webservice.utils.DecisionServiceConstants; import com.fr.decision.webservice.v10.login.LoginService; import com.fr.decision.webservice.v10.login.TokenResource; import com.fr.decision.webservice.v10.user.UserService; +import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; +import com.fr.security.JwtUtils; import com.fr.stable.StringUtils; import javax.servlet.FilterChain; @@ -32,24 +34,46 @@ public class DemoGlobalRequestFilterBridge extends AbstractGlobalRequestFilterPr String username = NetworkHelper.getHTTPRequestParameter(req, "username"); try { if (StringUtils.isNotEmpty(username)) { - FineLoggerFactory.getLogger().info("current username:" + username); - User user = UserService.getInstance().getUserByUserName(username); + FineLoggerFactory.getLogger().info("username:" + username); + //根据用户名找到对应用户 + User user = UserService.getInstance().getUserByUserName(username); //第二步 + //用户不存在抛异常 if (user == null) { throw new UserNotExistException(); } - String oldToken = TokenResource.COOKIE.getToken(req); - if (oldToken == null) { + //尝试获取当前浏览器已有的token + String oldToken = TokenResource.COOKIE.getToken(req); //第三步 + //token不存在说明第一次登录 || token过期了 || 用户名切换了 这3种情况都要进行重新登录 + if (oldToken == null || !checkTokenValid(req, oldToken, username)) { //第四步 + //10.0后台登录方法,生成一份新的token String token = LoginService.getInstance().login(req, res, username); + //把token塞进请求内,这样请求放行之后,就可通过后台的登录校验 req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, token); - filterChain.doFilter(req, res); - } else { - filterChain.doFilter(req, res); } - } else { - filterChain.doFilter(req, res); } + //放行请求 + filterChain.doFilter(req, res); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } + + + /** + * 校验token是否有效 + */ + private boolean checkTokenValid(HttpServletRequest req, String token, String currentUserName) { + try { + //当前登录用户和token对应的用户名不同,需要重新生成token + if (!ComparatorUtils.equals(currentUserName, JwtUtils.parseJWT(token).getSubject())) { + FineLoggerFactory.getLogger().info("username changed:" + currentUserName); + return false; + } + + return LoginService.getInstance().isLogged(req); + } catch (Exception ignore) { + } + + return false; + } } diff --git a/src/main/java/com/fr/plugin/demo/request/DemoRequestFilterBridge.java b/src/main/java/com/fr/plugin/demo/request/DemoRequestFilterBridge.java index 3b80a99..bfa7bd4 100644 --- a/src/main/java/com/fr/plugin/demo/request/DemoRequestFilterBridge.java +++ b/src/main/java/com/fr/plugin/demo/request/DemoRequestFilterBridge.java @@ -6,7 +6,6 @@ import com.fr.intelli.record.Original; import com.fr.log.FineLoggerFactory; import com.fr.record.analyzer.EnableMetrics; -import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -16,7 +15,7 @@ import java.io.IOException; public class DemoRequestFilterBridge extends AbstractEmbedRequestFilterProvider { @Override - @Focus(id="com.fr.plugin.demo.request.filter", text = "", source = Original.PLUGIN) + @Focus(id = "com.fr.plugin.demo.request.filter", text = "", source = Original.PLUGIN) public void filter(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { FineLoggerFactory.getLogger().info("=========Test Filter========"); }