From fb2f63790986998616bada27e4741022ae22b4da Mon Sep 17 00:00:00 2001 From: "LAPTOP-SB56SG4Q\\86185" Date: Mon, 11 Oct 2021 17:50:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=BC=80=E6=BA=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=9D=90=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JSD-8390-需求文档V1.docx | Bin 0 -> 62733 bytes README.md | 7 +- conf.properties | 12 + plugin.xml | 41 ++ .../sxka/sso/CustomLogInOutEventProvider.java | 40 ++ .../plugin/sxka/sso/RoleDBAccessProvider.java | 44 ++ .../com/fr/plugin/sxka/sso/SsoFilter.java | 519 ++++++++++++++++++ .../fr/plugin/sxka/sso/dao/UserInfoDao.java | 21 + .../sxka/sso/entity/UserInfoEntity.java | 310 +++++++++++ .../com/fr/plugin/sxka/sso/js/FileDef.java | 54 ++ .../fr/plugin/sxka/sso/js/JSCSSBridge.java | 25 + .../resources/com/fr/plugin/sxka/sso/theme.js | 5 + src/main/resources/conf.properties | 20 + 交付教程.docx | Bin 0 -> 87421 bytes 14 files changed, 1096 insertions(+), 2 deletions(-) create mode 100644 JSD-8390-需求文档V1.docx create mode 100644 conf.properties create mode 100644 plugin.xml create mode 100644 src/main/java/com/fr/plugin/sxka/sso/CustomLogInOutEventProvider.java create mode 100644 src/main/java/com/fr/plugin/sxka/sso/RoleDBAccessProvider.java create mode 100644 src/main/java/com/fr/plugin/sxka/sso/SsoFilter.java create mode 100644 src/main/java/com/fr/plugin/sxka/sso/dao/UserInfoDao.java create mode 100644 src/main/java/com/fr/plugin/sxka/sso/entity/UserInfoEntity.java create mode 100644 src/main/java/com/fr/plugin/sxka/sso/js/FileDef.java create mode 100644 src/main/java/com/fr/plugin/sxka/sso/js/JSCSSBridge.java create mode 100644 src/main/resources/com/fr/plugin/sxka/sso/theme.js create mode 100644 src/main/resources/conf.properties create mode 100644 交付教程.docx diff --git a/JSD-8390-需求文档V1.docx b/JSD-8390-需求文档V1.docx new file mode 100644 index 0000000000000000000000000000000000000000..12b61c4f9037d93386bfd2d0919fc937355be783 GIT binary patch literal 62733 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

9h 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 fO8*Z2z<;c?WF^3U#2_R + com.fr.plugin.sxka.sso + + yes + 1.19 + 10.0 + 2018-07-31 + fr.open + + + [2021-05-17]【1.1】增加更新用户信息的机制。
+ [2021-06-01]【1.2】增加用户信息存储到外置数据库表中(plugin_sxka_user_info)。
+ [2021-06-01]【1.3】增加返回到填报页面的参数username,id。
+ [2021-06-01]【1.4】增加返回到填报页面的参数op_name。
+ [2021-06-01]【1.5】status状态字段类型修改Int。
+ [2021-06-01]【1.6】status状态字段修改成String。
+ [2021-06-07]【1.7】尝试修改客户单点回传state为空的问题。
+ [2021-06-09]【1.8】切换无权限页面为指定报表模板
+ [2021-06-09]【1.9】无权限页面增加参数。
+ [2021-06-16]【1.10】增加注册时间字段。
+ [2021-06-17]【1.11】无权限页面增加参数。
+ [2021-06-17]【1.12】增加注册时间默认值。
+ [2021-06-25]【1.13】放行无权限模板页面引用的资源。
+ [2021-06-30]【1.14】尝试解决多次跳转单点问题。bug
+ [2021-06-30]【1.15】放行报表所有资源请求。bug
+ [2021-06-30]【1.16】解决多次跳转单点问题。bug
+ [2021-08-09]【1.17】修改密码新增为UUID,屏蔽展示ID,新增模板放行。
+ [2021-08-16]【1.18】放行登录页面的/login/config和login/slider bug
+ [2021-08-16]【1.19】兼容放行登录页面的/login bug
+ ]]>
+ + + + + + + + + +
\ No newline at end of file diff --git a/src/main/java/com/fr/plugin/sxka/sso/CustomLogInOutEventProvider.java b/src/main/java/com/fr/plugin/sxka/sso/CustomLogInOutEventProvider.java new file mode 100644 index 0000000..5edfdd7 --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/CustomLogInOutEventProvider.java @@ -0,0 +1,40 @@ +package com.fr.plugin.sxka.sso; + +import com.fr.decision.fun.impl.AbstractLogInOutEventProvider; +import com.fr.decision.webservice.login.LogInOutResultInfo; +import com.fr.decision.webservice.utils.DecisionStatusService; +import com.fr.general.PropertiesUtils; +import com.fr.log.FineLoggerFactory; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; + +/** + * @Author fr.open + * @Date 2021/5/18 + * @Description + **/ +public class CustomLogInOutEventProvider extends AbstractLogInOutEventProvider { + @Override + public String logoutAction(LogInOutResultInfo result) { + String state = getUserStateFromCookie(result.getRequest()); + try { + DecisionStatusService.loginStatusService().delete(state); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(),e); + } + String logout = PropertiesUtils.getProperties("conf").getProperty("logout"); + String format = "%s?client_id=%s&callback=%s&state=%s"; + return String.format(format, logout, PropertiesUtils.getProperties("conf").getProperty("client_id"), PropertiesUtils.getProperties("conf").getProperty("redirect_uri"),state); + } + + private String getUserStateFromCookie(HttpServletRequest request) { + if (request.getCookies() == null) return null; + + for (Cookie cookie : request.getCookies()) { + if ("uid_state".equals(cookie.getName())) return cookie.getValue(); + } + return null; + } + +} diff --git a/src/main/java/com/fr/plugin/sxka/sso/RoleDBAccessProvider.java b/src/main/java/com/fr/plugin/sxka/sso/RoleDBAccessProvider.java new file mode 100644 index 0000000..9210b1d --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/RoleDBAccessProvider.java @@ -0,0 +1,44 @@ +package com.fr.plugin.sxka.sso; + +import com.fr.db.fun.impl.AbstractDBAccessProvider; +import com.fr.plugin.sxka.sso.dao.UserInfoDao; +import com.fr.plugin.sxka.sso.entity.UserInfoEntity; +import com.fr.stable.db.accessor.DBAccessor; +import com.fr.stable.db.dao.BaseDAO; +import com.fr.stable.db.dao.DAOProvider; + +/** + * @Author fr.open + * @Date 2021/5/13 + * @Description + **/ +public class RoleDBAccessProvider extends AbstractDBAccessProvider { + + private static DBAccessor dbAccessor = null; + + public static DBAccessor getDbAccessor() { + return dbAccessor; + } + + @Override + public DAOProvider[] registerDAO() { + return new DAOProvider[]{ + new DAOProvider() { + @Override + public Class getEntityClass() { + return UserInfoEntity.class; + } + + @Override + public Class getDAOClass() { + return UserInfoDao.class; + } + } + }; + } + + @Override + public void onDBAvailable(DBAccessor dbAccessor) { + RoleDBAccessProvider.dbAccessor = dbAccessor; + } +} diff --git a/src/main/java/com/fr/plugin/sxka/sso/SsoFilter.java b/src/main/java/com/fr/plugin/sxka/sso/SsoFilter.java new file mode 100644 index 0000000..532eeb4 --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/SsoFilter.java @@ -0,0 +1,519 @@ +package com.fr.plugin.sxka.sso; + +import com.fr.base.PropertiesUtils; +import com.fr.data.NetworkHelper; +import com.fr.decision.authority.AuthorityContext; +import com.fr.decision.authority.data.CustomRole; +import com.fr.decision.authority.data.User; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.mobile.terminal.TerminalHandler; +import com.fr.decision.webservice.bean.authentication.OriginUrlResponseBean; +import com.fr.decision.webservice.bean.user.UserBean; +import com.fr.decision.webservice.exception.user.UserNotExistException; +import com.fr.decision.webservice.utils.DecisionServiceConstants; +import com.fr.decision.webservice.utils.DecisionStatusService; +import com.fr.decision.webservice.utils.WebServiceUtils; +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.http.HttpRequest; +import com.fr.general.http.HttpToolbox; +import com.fr.json.JSONObject; +import com.fr.json.revise.EmbedJson; +import com.fr.locale.InterProviderFactory; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.sxka.sso.dao.UserInfoDao; +import com.fr.plugin.sxka.sso.entity.UserInfoEntity; +import com.fr.plugin.transform.FunctionRecorder; +import com.fr.security.encryption.transmission.TransmissionEncryptors; +import com.fr.stable.StringUtils; +import com.fr.stable.db.action.DBAction; +import com.fr.stable.db.dao.DAOContext; +import com.fr.stable.query.QueryFactory; +import com.fr.stable.query.restriction.RestrictionFactory; +import com.fr.stable.web.Device; +import com.fr.third.fasterxml.jackson.databind.DeserializationFeature; +import com.fr.third.fasterxml.jackson.databind.ObjectMapper; +import com.fr.third.springframework.http.HttpHeaders; +import com.fr.third.springframework.http.MediaType; +import com.fr.third.springframework.util.DigestUtils; +import com.fr.web.controller.decision.api.auth.LoginResource; +import com.fr.web.utils.WebUtils; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * @Author fr.open + * @Date 2021/5/12 + * @Description + **/ +@FunctionRecorder +public class SsoFilter extends AbstractGlobalRequestFilterProvider { + + private static String[] notFilter = { + "/login/config","/login/slider", + "/system", "/decision/file", + "/decision/resources", "/remote", "/view/report", + "/static" + }; + private static HashMap ROLE_MAP; + + public SsoFilter() { + } + + static { + ROLE_MAP = new HashMap<>(); + ROLE_MAP.put("1", "企业管理员"); + ROLE_MAP.put("2", "个人用户"); + ROLE_MAP.put("3", "企业操作员"); + ROLE_MAP.put("4", "政府端用户"); + } + + @Override + public String filterName() { + return "sxka"; + } + + @Override + public String[] urlPatterns() { + return new String[]{"/*"}; + } + + @Override + public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { + if (req.getRequestURI().endsWith("/admin/login")) { + try { + String page = new LoginResource().page(req, res); + if (StringUtils.isBlank(page)) { + return; + } + PrintWriter writer = WebUtils.createPrintWriter(res); + writer.println(page); + writer.flush(); + writer.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return; + } + if (isLogin(req) || isAccept(req)) { + filter(req, res, filterChain); + return; + } + //登录页面跳转地址拦截 + String origin = WebUtils.getHTTPRequestParameter(req, "origin"); + if (req.getRequestURI().endsWith("decision/login")) { + if("get".equalsIgnoreCase(req.getMethod())){ + String state = this.getUserStateFromCookie(req, res); + try { + if (StringUtils.isNotBlank(origin)) { + OriginUrlResponseBean path = DecisionStatusService.originUrlStatusService().get(origin); + cacheParam(res, path.getOriginUrl()); + } + FineLoggerFactory.getLogger().info("Redirect origin is {}", req.getRequestURL()); + res.sendRedirect(buildAuthorizeUrl(state)); + return; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + }else { + filter(req, res, filterChain); + return; + } + + } + String state = this.getUserStateFromCookie(req, res); + String code = req.getParameter("code"); + if (StringUtils.isNotBlank(code)) { + JSONObject data = acquireAccessToken(code); + FineLoggerFactory.getLogger().info("get access_token is {}", data); + // 计算过期时间 + int expires = Integer.valueOf(data.get("expires_in").toString()); + Date expiresTime = new Date(System.currentTimeMillis() + (expires * 1000)); + data.put("expires_at", expiresTime); + // 保存关系映射 + putState(state, data); + } + JSONObject tokenItem = null; + try { + tokenItem = DecisionStatusService.loginStatusService(). get(state); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (tokenItem == null) { + try { + String jump = req.getRequestURL() + (req.getQueryString() == null ? StringUtils.EMPTY : "?" + req.getQueryString()); + cacheParam(res, jump); + FineLoggerFactory.getLogger().info("Redirect origin is {}", req.getRequestURL()); + res.sendRedirect(buildAuthorizeUrl(state)); + return; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + // 用检查 access token 是否过期 + Date tokenExpiresAt = (Date) tokenItem.get("expires_at"); + Date now = new Date(); + if (tokenExpiresAt.before(now)) { + // 使用 refresh token 刷新 access token + String refreshToken = tokenItem.get("refresh_token").toString(); + tokenItem = this.refreshToken(refreshToken); + putState(state, tokenItem); + } + String accessToken = tokenItem.get("access_token").toString(); + JSONObject userProfile = this.acquireUserInfo(state, accessToken); + try { + if (!existUser(userProfile.getString("id"))) { + FineLoggerFactory.getLogger().info("user {} not exist ", userProfile.getString("id")); + UserBean userBean = new UserBean(); + userBean.setUsername(userProfile.getString("id")); + userBean.setRealName(userProfile.getString("op_name")); + userBean.setEnable(true); + userBean.setPassword(TransmissionEncryptors.getInstance().encrypt(UUID.randomUUID().toString())); + UserService.getInstance().addUser(userBean); + } + UserInfoEntity infoEntity = recordUserInfo(userProfile); + if (checkAuth(infoEntity, req, res)) { + return; + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + filter(req, res, filterChain); + } + + private void putState(String state, JSONObject data) { + try { + DecisionStatusService.loginStatusService().put(state, data); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private void cacheParam(HttpServletResponse res, String jump) { + String id = UUID.randomUUID().toString(); + try { + DecisionStatusService.originUrlStatusService().put(id, new OriginUrlResponseBean(jump));//添加重定向地址 + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + Cookie cookie = new Cookie("ORIGIN_URL", id); + cookie.setPath("/"); + cookie.setMaxAge(60); + //cookie.setHttpOnly(true); + res.addCookie(cookie); + } + + private boolean checkAuth(UserInfoEntity entity, HttpServletRequest req, HttpServletResponse res) throws Exception { + if (StringUtils.isNotBlank(entity.getStatus()) && entity.getStatus().equalsIgnoreCase("true")) { + if (entity.getAccount_type().equals("1") || entity.getAccount_type().equals("3") || entity.getAccount_type().equals("4")) { + UserBean userAccount = UserService.getInstance().getUserAccount(entity.getId()); + String roleName = ROLE_MAP.containsKey(entity.getAccount_type()) ? ROLE_MAP.get(entity.getAccount_type()) : "其他"; + CustomRole role = AuthorityContext.getInstance().getCustomRoleController().findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("name", roleName))); + if (role != null) { + List oldRoleList = AuthorityContext.getInstance().getCustomRoleController().findByUser(userAccount.getId(), QueryFactory.create()); + oldRoleList.forEach(e -> { + try { + AuthorityContext.getInstance().getUserController().removeUserFromCustomRole(userAccount.getId(), e.getId()); + } catch (Exception exception) { + FineLoggerFactory.getLogger().error(exception.getMessage(), exception); + } + }); + AuthorityContext.getInstance().getUserController().addUserToCustomRole(userAccount.getId(), role.getId()); + } + } + loginFromToken(req, res, entity.getId()); + String jump = getOrigin(req); + FineLoggerFactory.getLogger().info("get Origin path is {}", jump); + if (StringUtils.isNotBlank(jump)) { + res.sendRedirect(jump); + return true; + } + return false; + } + if (entity.getAccount_type().equals("1") || entity.getAccount_type().equals("3") || entity.getAccount_type().equals("4")) { + setError(res, entity.getId()); + return true; + } + String url = PropertiesUtils.getProperties("conf").getProperty("write_report"); + String param = "username=" + URLEncoder.encode(entity.getOp_name(), "UTF-8") + "&id=" + entity.getId(); + url = url.indexOf("?") != -1 ? url + "&" + param : url + "?" + param; + res.sendRedirect(url); + return true; + } + + + private String getOrigin(HttpServletRequest req) throws Exception { + Cookie[] cookies = req.getCookies(); + if (cookies == null) { + return null; + } + for (int i = 0; i < cookies.length; i++) { + if ("ORIGIN_URL".equals(cookies[i].getName())) { + String id = cookies[i].getValue(); + OriginUrlResponseBean path = DecisionStatusService.originUrlStatusService().get(id); + if (path != null) { + DecisionStatusService.originUrlStatusService().delete(id); + return path.getOriginUrl(); + } + } + } + return StringUtils.EMPTY; + } + + private UserInfoEntity recordUserInfo(JSONObject user) { + ObjectMapper mapper = EmbedJson.MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + UserInfoEntity entity = mapper.convertValue(user, UserInfoEntity.class); + try { + return RoleDBAccessProvider.getDbAccessor().runDMLAction(new DBAction() { + @Override + public UserInfoEntity run(DAOContext daoContext) throws Exception { + UserInfoDao dao = daoContext.getDAO(UserInfoDao.class); + UserInfoEntity byId = dao.getById(entity.getId()); + if (byId != null) { + entity.setStatus(byId.getStatus()); + entity.setAccount_type(byId.getAccount_type()); + entity.setRegistryDate(byId.getRegistryDate()); + } else { + entity.setStatus("false"); + entity.setRegistryDate(new Date()); + } + dao.addOrUpdate(entity); + return entity; + } + }); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return entity; + + } + + private boolean existUser(String username) { + User user = null; + try { + user = UserService.getInstance().getUserByUserName(username); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return user != null; + } + + private boolean loginFromToken(HttpServletRequest req, HttpServletResponse res, String username) throws Exception { + try { + if (StringUtils.isNotEmpty(username)) { + FineLoggerFactory.getLogger().info("current username:" + username); + User user = UserService.getInstance().getUserByUserName(username); + FineLoggerFactory.getLogger().info("get user:" + user); + if (user == null) { + throw new UserNotExistException(); + } + String token = LoginService.getInstance().login(req, res, username); + FineLoggerFactory.getLogger().info("get login token:" + token); + req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, token); + FineLoggerFactory.getLogger().info("username:" + username + "login success"); + return true; + } else { + FineLoggerFactory.getLogger().warn("username is null!"); + return false; + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return false; + } + + + private JSONObject acquireUserInfo(String state, String accessToken) { + String url = PropertiesUtils.getProperties("conf").getProperty("user_url"); + + Map params = new HashMap<>(); + params.put("client_id", PropertiesUtils.getProperties("conf").getProperty("client_id")); + params.put("access_token", accessToken); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + try { + String res = HttpToolbox.executeAndParse(HttpRequest.custom().url(url) + .headers(headers.toSingleValueMap()) + .post(params) + .build()); + FineLoggerFactory.getLogger().info("get user name url is 【{}】,params is,{} res is {}", url, params, res); + JSONObject object = new JSONObject(res); + return object.getJSONObject("data"); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return JSONObject.EMPTY; + } + + private JSONObject refreshToken(String refreshToken) { + String url = PropertiesUtils.getProperties("conf").getProperty("token_url"); + + Map params = new HashMap<>(); + params.put("grant_type", "refresh_token"); + params.put("refresh_token", refreshToken); + params.put("client_id", PropertiesUtils.getProperties("conf").getProperty("client_id")); + params.put("client_sign", this.makeSign(refreshToken)); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + try { + String res = HttpToolbox.executeAndParse(HttpRequest.custom().url(url) + .headers(headers.toSingleValueMap()) + .post(params) + .build()); + FineLoggerFactory.getLogger().info("get refresh token url is 【{}】,params is,{} res is {}", url, params, res); + JSONObject object = new JSONObject(res); + return object.getJSONObject("data"); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return JSONObject.EMPTY; + } + + private JSONObject acquireAccessToken(String code) { + String url = PropertiesUtils.getProperties("conf").getProperty("token_url"); + Map params = new HashMap<>(); + params.put("grant_type", "authorization_code"); + params.put("code", code); + params.put("client_id", PropertiesUtils.getProperties("conf").getProperty("client_id")); + params.put("client_sign", this.makeSign(code)); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + try { + String res = HttpToolbox.executeAndParse(HttpRequest.custom().url(url) + .headers(headers.toSingleValueMap()) + .post(params) + .build()); + FineLoggerFactory.getLogger().info("get access token url is 【{}】,params is,{} res is {}", url, params, res); + JSONObject object = new JSONObject(res); + return object.getJSONObject("data"); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return JSONObject.EMPTY; + } + + /** + * 生成签名值= md5Hex("$$", UTF8) + * + * @param data + * @return + */ + private String makeSign(String data) { + String value = String.join("$", new String[]{ + PropertiesUtils.getProperties("conf").getProperty("client_id"), + data, + PropertiesUtils.getProperties("conf").getProperty("client_secret") + }); + return DigestUtils.md5DigestAsHex(value.getBytes(StandardCharsets.UTF_8)); + } + + private String buildAuthorizeUrl(String state) { + String format = "%s?client_id=%s&response_type=code&scope=A1,C1,C2&state=%s&redirect_uri=%s"; + return String.format(format, PropertiesUtils.getProperties("conf").getProperty("auth_url"), PropertiesUtils.getProperties("conf").getProperty("client_id"), state, PropertiesUtils.getProperties("conf").getProperty("redirect_uri")); + } + + private void setUserStateCookie(HttpServletResponse response, String state) { + Cookie cookie = new Cookie("uid_state", state); + cookie.setMaxAge(300); + // 正式环境采用HTTPS协议,需要取消下方注释,确保仅在HTTPS下可用 +// cookie.setSecure(true); + cookie.setPath("/"); + response.addCookie(cookie); + } + + private String getUserStateFromCookie(HttpServletRequest request, HttpServletResponse res) { + if (request.getCookies() == null) { + return null; + } + String state = StringUtils.EMPTY; + for (Cookie cookie : request.getCookies()) { + if ("uid_state".equals(cookie.getName())) { + state = cookie.getValue(); + } + } + if (StringUtils.isBlank(state)) { + state = UUID.randomUUID().toString(); + this.setUserStateCookie(res, state); + } + return state; + } + + private boolean isAccept(HttpServletRequest req) { + if (req.getRequestURI().endsWith("/view/form") || req.getRequestURI().endsWith("/view/report")) { + return true; + /*String viewlet = WebUtils.getHTTPRequestParameter(req, "viewlet"); + if (StringUtils.isBlank(viewlet)) { + return true; + } + if (!whiteList.stream().filter(e -> viewlet.contains(e)).collect(Collectors.toList()).isEmpty()) { + return true; + }*/ + } + for (int i = 0; i < notFilter.length; i++) { + if (req.getRequestURI().contains(notFilter[i])) { + return true; + } + } + if (req.getRequestURI().endsWith("/.css") || req.getRequestURI().endsWith("/.js")) { + return true; + } + return false; + } + + private boolean isLogin(HttpServletRequest request) { + String oldToken = TokenResource.COOKIE.getToken(request); + return oldToken != null && checkTokenValid(request, (String) oldToken); + } + + private boolean checkTokenValid(HttpServletRequest req, String token) { + try { + Device device = NetworkHelper.getDevice(req); + LoginService.getInstance().loginStatusValid(token, TerminalHandler.getTerminal(req, device)); + return true; + } catch (Exception ignore) { + } + return false; + } + + private void setError(HttpServletResponse res, String id) { + String error = PropertiesUtils.getProperties("conf").getProperty("unavailable"); + try { + if (StringUtils.isNotBlank(error)) { + error = error.contains("?") ? (error + "&id=" + id) : (error + "?+id=" + id); + res.sendRedirect(error); + return; + } + PrintWriter printWriter = WebUtils.createPrintWriter(res); + Map map = new HashMap<>(); + map.put("result", InterProviderFactory.getProvider().getLocText("Fine-Engine_Error_Page_Result")); + map.put("reason", "当前用户已冻结,请联系系统管理员激活"); + map.put("solution", InterProviderFactory.getProvider().getLocText("Fine-Engine_Please_Contact_Platform_Admin")); + String page = WebServiceUtils.parseWebPageResourceSafe("com/fr/web/controller/decision/entrance/resources/unavailable.html", map); + printWriter.write(page); + printWriter.flush(); + printWriter.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private void filter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { + try { + filterChain.doFilter(req, res); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } catch (ServletException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/fr/plugin/sxka/sso/dao/UserInfoDao.java b/src/main/java/com/fr/plugin/sxka/sso/dao/UserInfoDao.java new file mode 100644 index 0000000..de14429 --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/dao/UserInfoDao.java @@ -0,0 +1,21 @@ +package com.fr.plugin.sxka.sso.dao; + +import com.fr.plugin.sxka.sso.entity.UserInfoEntity; +import com.fr.stable.db.dao.BaseDAO; +import com.fr.stable.db.session.DAOSession; + +/** + * @Author fr.open + * @Date 2021/5/17 + * @Description + **/ +public class UserInfoDao extends BaseDAO { + public UserInfoDao(DAOSession daoSession) { + super(daoSession); + } + + @Override + protected Class getEntityClass() { + return UserInfoEntity.class; + } +} diff --git a/src/main/java/com/fr/plugin/sxka/sso/entity/UserInfoEntity.java b/src/main/java/com/fr/plugin/sxka/sso/entity/UserInfoEntity.java new file mode 100644 index 0000000..cc23fd9 --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/entity/UserInfoEntity.java @@ -0,0 +1,310 @@ +package com.fr.plugin.sxka.sso.entity; + +import com.fr.stable.db.entity.BaseEntity; +import com.fr.third.javax.persistence.Column; +import com.fr.third.javax.persistence.Entity; +import com.fr.third.javax.persistence.Table; + +import java.util.Date; + +/** + * @Author fr.open + * @Date 2021/5/13 + * @Description + **/ +@Entity +@Table(name = "plugin_sxka_user_info") +public class UserInfoEntity extends BaseEntity { + + private static final long serialVersionUID = 5278704449983309952L; + + @Column(name = "op_name") + private String op_name; + + @Column(name = "organization") + private String organization; + + @Column(name = "account_type") + private String account_type; + + @Column(name = "login_type") + private String login_type; + + @Column(name = "gs_name") + private String gs_name; + + @Column(name = "gs_name_en") + private String gs_name_en; + + @Column(name = "gs_type") + private String gs_type; + + @Column(name = "gs_address") + private String gs_address; + + @Column(name = "gs_address_en") + private String gs_address_en; + + @Column(name = "gs_tax_code") + private String gs_tax_code; + + @Column(name = "gs_expires") + private String gs_expires; + + @Column(name = "gs_postcode") + private String gs_postcode; + + @Column(name = "gs_scope") + private String gs_scope; + + @Column(name = "gs_status") + private String gs_status; + + @Column(name = "gs_regcap") + private String gs_regcap; + + @Column(name = "gs_regcap_cur") + private String gs_regcap_cur; + + @Column(name = "gs_social_credit_code") + private String gs_social_credit_code; + + @Column(name = "gs_code") + private String gs_code; + + @Column(name = "gs_regorg") + private String gs_regorg; + + @Column(name = "gs_reg_number") + private String gs_reg_number; + + @Column(name = "gs_location") + private String gs_location; + + @Column(name = "cus_number") + private String cus_number; + + @Column(name = "cus_expires") + private String cus_expires; + + @Column(name = "cus_master") + private String cus_master; + + @Column(name = "status") + private String status; + + @Column(name = "registry_date") + private Date registryDate; + + public Date getRegistryDate() { + return registryDate; + } + + public void setRegistryDate(Date registryDate) { + this.registryDate = registryDate; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getOp_name() { + return op_name; + } + + public void setOp_name(String op_name) { + this.op_name = op_name; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public String getAccount_type() { + return account_type; + } + + public void setAccount_type(String account_type) { + this.account_type = account_type; + } + + public String getLogin_type() { + return login_type; + } + + public void setLogin_type(String login_type) { + this.login_type = login_type; + } + + public String getGs_name() { + return gs_name; + } + + public void setGs_name(String gs_name) { + this.gs_name = gs_name; + } + + public String getGs_name_en() { + return gs_name_en; + } + + public void setGs_name_en(String gs_name_en) { + this.gs_name_en = gs_name_en; + } + + public String getGs_type() { + return gs_type; + } + + public void setGs_type(String gs_type) { + this.gs_type = gs_type; + } + + public String getGs_address() { + return gs_address; + } + + public void setGs_address(String gs_address) { + this.gs_address = gs_address; + } + + public String getGs_address_en() { + return gs_address_en; + } + + public void setGs_address_en(String gs_address_en) { + this.gs_address_en = gs_address_en; + } + + public String getGs_tax_code() { + return gs_tax_code; + } + + public void setGs_tax_code(String gs_tax_code) { + this.gs_tax_code = gs_tax_code; + } + + public String getGs_expires() { + return gs_expires; + } + + public void setGs_expires(String gs_expires) { + this.gs_expires = gs_expires; + } + + public String getGs_postcode() { + return gs_postcode; + } + + public void setGs_postcode(String gs_postcode) { + this.gs_postcode = gs_postcode; + } + + public String getGs_scope() { + return gs_scope; + } + + public void setGs_scope(String gs_scope) { + this.gs_scope = gs_scope; + } + + public String getGs_status() { + return gs_status; + } + + public void setGs_status(String gs_status) { + this.gs_status = gs_status; + } + + public String getGs_regcap() { + return gs_regcap; + } + + public void setGs_regcap(String gs_regcap) { + this.gs_regcap = gs_regcap; + } + + public String getGs_regcap_cur() { + return gs_regcap_cur; + } + + public void setGs_regcap_cur(String gs_regcap_cur) { + this.gs_regcap_cur = gs_regcap_cur; + } + + public String getGs_social_credit_code() { + return gs_social_credit_code; + } + + public void setGs_social_credit_code(String gs_social_credit_code) { + this.gs_social_credit_code = gs_social_credit_code; + } + + public String getGs_code() { + return gs_code; + } + + public void setGs_code(String gs_code) { + this.gs_code = gs_code; + } + + public String getGs_regorg() { + return gs_regorg; + } + + public void setGs_regorg(String gs_regorg) { + this.gs_regorg = gs_regorg; + } + + public String getGs_reg_number() { + return gs_reg_number; + } + + public void setGs_reg_number(String gs_reg_number) { + this.gs_reg_number = gs_reg_number; + } + + public String getGs_location() { + return gs_location; + } + + public void setGs_location(String gs_location) { + this.gs_location = gs_location; + } + + public String getCus_number() { + return cus_number; + } + + public void setCus_number(String cus_number) { + this.cus_number = cus_number; + } + + public String getCus_expires() { + return cus_expires; + } + + public void setCus_expires(String cus_expires) { + this.cus_expires = cus_expires; + } + + public String getCus_master() { + return cus_master; + } + + public void setCus_master(String cus_master) { + this.cus_master = cus_master; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/src/main/java/com/fr/plugin/sxka/sso/js/FileDef.java b/src/main/java/com/fr/plugin/sxka/sso/js/FileDef.java new file mode 100644 index 0000000..0a79557 --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/js/FileDef.java @@ -0,0 +1,54 @@ +package com.fr.plugin.sxka.sso.js; + +import com.fr.plugin.transform.ExecuteFunctionRecord; +import com.fr.web.struct.Component; +import com.fr.web.struct.Filter; +import com.fr.web.struct.browser.RequestClient; +import com.fr.web.struct.category.ScriptPath; +import com.fr.web.struct.category.StylePath; + +/** + * @author fr.open + * @date 2021/8/12 + */ +public class FileDef extends Component { + public static final FileDef KEY = new FileDef(); + private FileDef(){} + /** + * 返回需要引入的JS脚本路径 + * @param client 请求客户端描述 + * @return JS脚本路径 + */ + @Override + public ScriptPath script(RequestClient client ) { + //如果不需要就直接返回 ScriptPath.EMPTY + return ScriptPath.build("com/fr/plugin/sxka/sso/theme.js"); + } + + /** + * 返回需要引入的CSS样式路径 + * @param client 请求客户端描述 + * @return CSS样式路径 + */ + @Override + public StylePath style(RequestClient client ) { + //如果不需要就直接返回 StylePath.EMPTY; + return StylePath.EMPTY; + } + + /** + * 通过给定的资源过滤器控制是否加载这个资源 + * @return 资源过滤器 + */ + @ExecuteFunctionRecord + @Override + public Filter filter() { + return new Filter(){ + @Override + public boolean accept() { + //任何情况下我们都在平台组件加载时加载我们的组件 + return true; + } + }; + } +} diff --git a/src/main/java/com/fr/plugin/sxka/sso/js/JSCSSBridge.java b/src/main/java/com/fr/plugin/sxka/sso/js/JSCSSBridge.java new file mode 100644 index 0000000..8bae4a4 --- /dev/null +++ b/src/main/java/com/fr/plugin/sxka/sso/js/JSCSSBridge.java @@ -0,0 +1,25 @@ +package com.fr.plugin.sxka.sso.js; + +import com.fr.decision.fun.impl.AbstractWebResourceProvider; +import com.fr.decision.web.MainComponent; +import com.fr.plugin.transform.FunctionRecorder; +import com.fr.web.struct.Atom; + +/** + * @author fr.open + * @date 2021/8/12 + */ +@FunctionRecorder +public class JSCSSBridge extends AbstractWebResourceProvider { + @Override + public Atom attach() { + //在平台主组件加载时添加我们自己的组件 + return MainComponent.KEY; + } + + @Override + public Atom client() { + //我们自己要引入的组件 + return FileDef.KEY; + } +} diff --git a/src/main/resources/com/fr/plugin/sxka/sso/theme.js b/src/main/resources/com/fr/plugin/sxka/sso/theme.js new file mode 100644 index 0000000..57b3b89 --- /dev/null +++ b/src/main/resources/com/fr/plugin/sxka/sso/theme.js @@ -0,0 +1,5 @@ +!(function () { + BI.Plugin.registerObject("dec.user.account.setting.real_name", function (widget) { + widget.element.prev().hide() + }) +}()); diff --git a/src/main/resources/conf.properties b/src/main/resources/conf.properties new file mode 100644 index 0000000..9638c0f --- /dev/null +++ b/src/main/resources/conf.properties @@ -0,0 +1,20 @@ +#\u5355\u70B9\u767B\u5F55\u7EDF\u4E00\u5730\u5740 +auth_url=https://xxx/oauth/authorize +#\u83B7\u53D6tokan\u5730\u5740 +token_url=https://xxx/oauth/token +#\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u63A5\u53E3 +user_url=https://xxx/resource/user +#client_id +client_id=xxx +#client_secret +client_secret=xxx +#\u767B\u51FA\u540E\u8DF3\u8F6C\u5730\u5740 +logout=https://xxx/oauth/logout +##\u56DE\u8C03\u5730\u5740 +redirect_uri=http://locahost:8075/webroot/decision +##\u586B\u62A5\u5730\u5740 +write_report= +##\u65E0\u6743\u9650\u5730\u5740 +unavailable= +##\u653E\u884C\u76EE\u5F55 +whiteList=fr/test \ No newline at end of file diff --git a/交付教程.docx b/交付教程.docx new file mode 100644 index 0000000000000000000000000000000000000000..120a6334b89460d6964bb2443a90b8d815da1aff GIT binary patch literal 87421 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

{&~m2b5LntW}oKFO}`L@Lk+IVZykPG}Lp(vx-K( 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 literal 0 HcmV?d00001