pioneer
2 years ago
commit
f3714cc172
23 changed files with 2035 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
# open-JSD-10156 |
||||||
|
|
||||||
|
JSD-10156 远程设计能用普通用户登录\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
@ -0,0 +1,36 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<plugin> |
||||||
|
<id>com.fr.plugin.xx.ltqc.auth</id> |
||||||
|
<name><![CDATA[岚图汽车门户集成]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.11</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2018-07-31</jartime> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<description><![CDATA[岚图汽车门户集成]]></description> |
||||||
|
<change-notes><![CDATA[ |
||||||
|
[2022-02-13]【1.0】初始化插件。<br/> |
||||||
|
[2022-02-24]【1.1】新增单点功能。<br/> |
||||||
|
[2022-02-28]【1.2】当前用户未登录无法访问。<br/> |
||||||
|
[2022-03-07]【1.3】新增接口。<br/> |
||||||
|
[2022-03-08]【1.4】关系使用ID。<br/> |
||||||
|
[2022-03-08]【1.5】增加鉴权输出日志。<br/> |
||||||
|
[2022-03-14]【1.6】增加目录report鉴权。<br/> |
||||||
|
[2022-03-18]【1.7】admin权限放行。<br/> |
||||||
|
[2022-03-18]【1.8】未登录无权限。<br/> |
||||||
|
[2022-03-21]【1.9】增加全量同步逻辑。<br/> |
||||||
|
[2022-03-21]【1.10】全量删除修改。<br/> |
||||||
|
[2022-05-10]【1.11】全量删除修改。<br/> |
||||||
|
]]></change-notes> |
||||||
|
<extra-core> |
||||||
|
<DBAccessProvider class="com.fr.plugin.xx.ltqc.auth.AuthDBAccessProvider"/> |
||||||
|
</extra-core> |
||||||
|
<extra-decision> |
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.xx.ltqc.auth.AuthFilter"/> |
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.xx.ltqc.auth.RemoteFilter"/> |
||||||
|
<HttpHandlerProvider class="com.fr.plugin.xx.ltqc.auth.RequestHandlerBridge"/> |
||||||
|
<URLAliasProvider class="com.fr.plugin.xx.ltqc.auth.RequestURLAliasBridge" /> |
||||||
|
</extra-decision> |
||||||
|
<function-recorder class="com.fr.plugin.xx.ltqc.auth.RequestURLAliasBridge"/> |
||||||
|
<lifecycle-monitor class="com.fr.plugin.xx.ltqc.auth.LRGT"/> |
||||||
|
</plugin> |
@ -0,0 +1,47 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<parent> |
||||||
|
<artifactId>starter</artifactId> |
||||||
|
<groupId>com.fr.plugin</groupId> |
||||||
|
<version>10.0</version> |
||||||
|
<relativePath>../../pom.xml</relativePath> |
||||||
|
</parent> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
|
||||||
|
<artifactId>jsd9155</artifactId> |
||||||
|
|
||||||
|
<properties> |
||||||
|
<maven.compiler.source>8</maven.compiler.source> |
||||||
|
<maven.compiler.target>8</maven.compiler.target> |
||||||
|
</properties> |
||||||
|
|
||||||
|
<build> |
||||||
|
<!---如果要更改调试插件,改这里的配置就可以了--> |
||||||
|
<outputDirectory> |
||||||
|
${project.basedir}/../../webroot/WEB-INF/plugins/plugin-${project.groupId}.${project.artifactId}-${project.version}/classes |
||||||
|
</outputDirectory> |
||||||
|
|
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>2.3.2</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
<resources> |
||||||
|
<resource> |
||||||
|
<directory>src/main/resources</directory> |
||||||
|
<includes> |
||||||
|
<include>**/*</include> |
||||||
|
</includes> |
||||||
|
</resource> |
||||||
|
</resources> |
||||||
|
</build> |
||||||
|
|
||||||
|
</project> |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
import com.fr.db.fun.impl.AbstractDBAccessProvider; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.dao.RolePathAuthDao; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.entity.RolePathAuthEntity; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOProvider; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2020/11/29 |
||||||
|
**/ |
||||||
|
public class AuthDBAccessProvider 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 RolePathAuthEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return RolePathAuthDao.class; |
||||||
|
} |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onDBAvailable(DBAccessor dbAccessor) { |
||||||
|
AuthDBAccessProvider.dbAccessor = dbAccessor; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,176 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.data.Authority; |
||||||
|
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.webservice.utils.WebServiceUtils; |
||||||
|
import com.fr.decision.webservice.v10.user.CustomRoleService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.locale.InterProviderFactory; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.action.RolePathAuthService; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.conf.AuthSsoConfig; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.CommonUtils; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.CookieUtils; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.HttpUtil; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.http.Cookie; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.PrintWriter; |
||||||
|
import java.util.*; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2021/12/04 |
||||||
|
*/ |
||||||
|
@Authorize(callSignKey = Constants.PLUGIN_ID) |
||||||
|
public class AuthFilter extends AbstractGlobalRequestFilterProvider { |
||||||
|
|
||||||
|
private static final String login_url="/authority/login/Login"; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { |
||||||
|
String validateUser = StringUtils.EMPTY; |
||||||
|
Cookie cookie = CookieUtils.getCookie(request, AuthSsoConfig.getInstance().getCookieKey()); |
||||||
|
if(cookie != null && AuthSsoConfig.getInstance().isConfiged()){ |
||||||
|
Map<String, String> param = new HashMap<>(); |
||||||
|
param.put("ticketValue",cookie.getValue()); |
||||||
|
String res = HttpUtil.sendGet(AuthSsoConfig.getInstance().getValidateUrl(), param, null); |
||||||
|
LogUtils.debug4plugin("validate cookie url is {}, param is {}, res is {}",AuthSsoConfig.getInstance().getValidateUrl(),param,res); |
||||||
|
JSONObject object = new JSONObject(res); |
||||||
|
if(object.has("data")){ |
||||||
|
validateUser = object.getString("data"); |
||||||
|
if(CommonUtils.checkUser(validateUser)){ |
||||||
|
CommonUtils.login(validateUser,request,response); |
||||||
|
}else { |
||||||
|
setError(response,"用户不存在"); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
try { |
||||||
|
User user = null; |
||||||
|
if(StringUtils.isNotBlank(validateUser)){ |
||||||
|
user = UserService.getInstance().getUserByUserName(validateUser); |
||||||
|
}else { |
||||||
|
try { |
||||||
|
user = UserService.getInstance().getUserByRequestCookie(request); |
||||||
|
}catch (Exception e){ |
||||||
|
LogUtils.debug4plugin("current user not login"); |
||||||
|
} |
||||||
|
} |
||||||
|
String let = getlet(request); |
||||||
|
if (StringUtils.isBlank(let)) { |
||||||
|
next(request, response, chain); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(user == null){ |
||||||
|
setError(response, "当前无登录用户,无查看权限"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Set<String> adminUserIdList = new HashSet<>(UserService.getInstance().getAdminUserIdList()); |
||||||
|
if(StringUtils.isBlank(let) || adminUserIdList.contains(user.getId())){ |
||||||
|
next(request,response,chain); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (!let.startsWith("/")) { |
||||||
|
let = "/" + let; |
||||||
|
} |
||||||
|
LogUtils.debug4plugin("current report is {}",let); |
||||||
|
List<CustomRole> roles = CustomRoleService.getInstance().getCustomRolesByUser(user.getId()); |
||||||
|
LogUtils.debug4plugin("current user {} role is {}",user.getUserName(),roles); |
||||||
|
if (roles == null || roles.isEmpty()) { |
||||||
|
setError(response, "当前用户无相关角色权限"); |
||||||
|
return; |
||||||
|
} |
||||||
|
Set<String> paths = RolePathAuthService.getPathsByRole(roles.stream().map(CustomRole::getId).collect(Collectors.toSet())); |
||||||
|
LogUtils.debug4plugin("current user {} role is {}",user.getUserName(),paths); |
||||||
|
if (!paths.contains(let)) { |
||||||
|
setError(response, "当前用户角色无模板权限"); |
||||||
|
return; |
||||||
|
} |
||||||
|
next(request, response, chain); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(),e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private String getlet(HttpServletRequest request) { |
||||||
|
String let = WebUtils.getReportTitleFromRequest(request); |
||||||
|
if(StringUtils.isNotBlank(let)){ |
||||||
|
return let; |
||||||
|
} |
||||||
|
String requestURI = request.getRequestURI(); |
||||||
|
if(!requestURI.contains("/v10/entry/access/")){ |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
String uid = requestURI.substring(requestURI.indexOf("access/") + 7); |
||||||
|
Authority authority = null; |
||||||
|
try { |
||||||
|
authority = (Authority) AuthorityContext.getInstance().getAuthorityController().getById(uid); |
||||||
|
} catch (Exception e) { |
||||||
|
|
||||||
|
} |
||||||
|
if(authority != null ){ |
||||||
|
return authority.getPath(); |
||||||
|
} |
||||||
|
return let; |
||||||
|
} |
||||||
|
|
||||||
|
public static void next(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { |
||||||
|
try { |
||||||
|
chain.doFilter(request, response); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "sso"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
LogUtils.error("未注册或禁用"); |
||||||
|
return new String[]{"/neverbeused"}; |
||||||
|
} |
||||||
|
return new String[]{ |
||||||
|
"/decision", |
||||||
|
"/decision/view/report", |
||||||
|
"/decision/view/form", |
||||||
|
"/decision/v10/entry/access/*" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private void setError(HttpServletResponse res, String reason) { |
||||||
|
try { |
||||||
|
PrintWriter printWriter = WebUtils.createPrintWriter(res); |
||||||
|
Map<String, Object> map = new HashMap<>(); |
||||||
|
map.put("result", InterProviderFactory.getProvider().getLocText("Fine-Engine_Error_Page_Result")); |
||||||
|
map.put("reason", 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); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @date 2020/5/14 |
||||||
|
*/ |
||||||
|
public class Constants { |
||||||
|
public static final String PLUGIN_ID = "com.fr.plugin.xx.ltqc.auth"; |
||||||
|
|
||||||
|
public static final String PLUGIN_NAME= "门户集成"; |
||||||
|
|
||||||
|
public static final String ROOT = "/reportlets"; |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
import com.fr.plugin.context.PluginContext; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.conf.AuthSsoConfig; |
||||||
|
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2022/01/13 |
||||||
|
*/ |
||||||
|
public class LRGT extends AbstractPluginLifecycleMonitor { |
||||||
|
@Override |
||||||
|
public void afterRun(PluginContext pluginContext) { |
||||||
|
AuthSsoConfig.getInstance(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void beforeStop(PluginContext pluginContext) { |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void beforeUninstall(PluginContext pluginContext) { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void afterInstall(PluginContext var1) { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,122 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
import com.fr.data.NetworkHelper; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||||
|
import com.fr.decision.webservice.Response; |
||||||
|
import com.fr.decision.webservice.exception.login.UserPwdErrorException; |
||||||
|
import com.fr.decision.webservice.exception.user.UserNotExistException; |
||||||
|
import com.fr.decision.webservice.v10.remote.RemoteDesignStatusService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.exception.RemoteDesignPermissionDeniedException; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.conf.AuthSsoConfig; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.CommonUtils; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.HttpUtil; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.security.JwtUtils; |
||||||
|
import com.fr.security.SecurityToolbox; |
||||||
|
import com.fr.security.encryption.mode.EncryptionMode; |
||||||
|
import com.fr.security.encryption.storage.StorageEncryptors; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.web.service.RemoteDesignAuthorityDataService; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/5/9 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class RemoteFilter extends AbstractGlobalRequestFilterProvider { |
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "design"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
return new String[]{"/decision/remote/design/token"}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||||
|
LogUtils.debug4plugin("捕获到远程设计器请求"); |
||||||
|
try { |
||||||
|
String username, password, compatibleParameters0; |
||||||
|
if (StringUtils.equalsIgnoreCase(req.getMethod(), "GET")) { |
||||||
|
username = NetworkHelper.getHTTPRequestParameter(req, "username"); |
||||||
|
password = NetworkHelper.getHTTPRequestParameter(req, "password"); |
||||||
|
compatibleParameters0 = NetworkHelper.getHTTPRequestParameter(req, "compatibleParameters0"); |
||||||
|
} else { |
||||||
|
username = NetworkHelper.getHTTPRequestParameter(req, "username"); |
||||||
|
password = SecurityToolbox.defaultDecrypt(NetworkHelper.getHTTPRequestParameter(req, "password")); |
||||||
|
compatibleParameters0 = NetworkHelper.getHTTPRequestParameter(req, "compatibleParameters0"); |
||||||
|
} |
||||||
|
if (StringUtils.isEmpty(compatibleParameters0) && !ComparatorUtils.equals(StorageEncryptors.getInstance().getCurrentEncryptionMode(), EncryptionMode.RSA)) { |
||||||
|
throw new RemoteDesignPermissionDeniedException(); |
||||||
|
} |
||||||
|
String token = StringUtils.EMPTY; |
||||||
|
Map<String, Object> loginParam = new HashMap<>(); |
||||||
|
loginParam.put("username", username); |
||||||
|
loginParam.put("password", password); |
||||||
|
String loginRes = HttpUtil.doFormPost(AuthSsoConfig.getInstance().getEnvUrl(), null, loginParam, "UTF-8"); |
||||||
|
LogUtils.debug4plugin("login res is {}", loginRes); |
||||||
|
JSONObject loginObject = new JSONObject(loginRes); |
||||||
|
if (loginObject.has("data") && loginObject.getInt("__statusCode") == 1) { |
||||||
|
token = loginObject.getString("data"); |
||||||
|
} else { |
||||||
|
throw new UserPwdErrorException(); |
||||||
|
} |
||||||
|
LogUtils.debug4plugin("get token is {}",token); |
||||||
|
String validateUser = StringUtils.EMPTY; |
||||||
|
Map<String, String> param = new HashMap<>(); |
||||||
|
param.put("ticketValue", token); |
||||||
|
String result = HttpUtil.sendGet(AuthSsoConfig.getInstance().getValidateUrl(), param, null); |
||||||
|
LogUtils.debug4plugin("validate cookie url is {}, param is {}, res is {}", AuthSsoConfig.getInstance().getValidateUrl(), param, res); |
||||||
|
JSONObject object = new JSONObject(result); |
||||||
|
if (object.has("data")) { |
||||||
|
validateUser = object.getString("data"); |
||||||
|
if (CommonUtils.checkUser(validateUser)) { |
||||||
|
login(res, username); |
||||||
|
} else { |
||||||
|
throw new UserNotExistException(); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (RemoteDesignPermissionDeniedException | UserNotExistException | UserPwdErrorException e) { |
||||||
|
setRes(res, Response.error(e.errorCode(), e.getMessage())); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void login(HttpServletResponse res, String username) throws Exception { |
||||||
|
User user = UserService.getInstance().getUserByUserName(username); |
||||||
|
if (user != null && RemoteDesignAuthorityDataService.getInstance().hasAuthority(user.getId())) { |
||||||
|
setRes(res, Response.ok(this.generateToken(username))); |
||||||
|
} else { |
||||||
|
throw new RemoteDesignPermissionDeniedException(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void setRes(HttpServletResponse res, Response body) { |
||||||
|
try { |
||||||
|
res.setContentType("application/json"); |
||||||
|
WebUtils.printAsJSON(res, JSONObject.mapFrom(body)); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private String generateToken(String username) throws Exception { |
||||||
|
String jwt = JwtUtils.createDefaultJWT(username); |
||||||
|
RemoteDesignStatusService.loginStatusService().put(jwt, username, 1209600000); |
||||||
|
return jwt; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
import com.fr.decision.fun.HttpHandler; |
||||||
|
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.handler.*; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2021/07/28 |
||||||
|
*/ |
||||||
|
@FunctionRecorder |
||||||
|
@Authorize(callSignKey = Constants.PLUGIN_ID) |
||||||
|
public class RequestHandlerBridge extends AbstractHttpHandlerProvider { |
||||||
|
@Override |
||||||
|
public HttpHandler[] registerHandlers() { |
||||||
|
return new HttpHandler[]{ |
||||||
|
new CptListHandler(), |
||||||
|
new AddRoleHandler(), |
||||||
|
new DelRoleHandler(), |
||||||
|
new EditRoleHandler(), |
||||||
|
new AddUserHandler(), |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAlias; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2021/07/28 |
||||||
|
*/ |
||||||
|
public class RequestURLAliasBridge extends AbstractURLAliasProvider { |
||||||
|
@Override |
||||||
|
public URLAlias[] registerAlias() { |
||||||
|
return new URLAlias[]{ |
||||||
|
URLAliasFactory.createPluginAlias("/cpt/list", "/cpt/list", false), |
||||||
|
URLAliasFactory.createPluginAlias("/auth/addRole", "/auth/addRole", false), |
||||||
|
URLAliasFactory.createPluginAlias("/auth/editRole", "/auth/editRole", false), |
||||||
|
URLAliasFactory.createPluginAlias("/auth/addUser", "/auth/addUser", false), |
||||||
|
URLAliasFactory.createPluginAlias("/auth/delRole", "/auth/delRole", false), |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,89 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.action; |
||||||
|
|
||||||
|
import com.fr.plugin.db.PluginDBManager; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.AuthDBAccessProvider; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.dao.RolePathAuthDao; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.entity.RolePathAuthEntity; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.db.session.DBSession; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
|
||||||
|
import java.util.HashSet; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Set; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/14 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class RolePathAuthService { |
||||||
|
|
||||||
|
public static void save(List<RolePathAuthEntity> list) { |
||||||
|
try { |
||||||
|
AuthDBAccessProvider.getDbAccessor().runDMLAction((DBAction<Integer>) daoContext -> { |
||||||
|
save(daoContext.getDAO(RolePathAuthDao.class), list); |
||||||
|
return null; |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.debug4plugin(e.getMessage(), e); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static void save(BaseDAO dao, List<RolePathAuthEntity> list) { |
||||||
|
try { |
||||||
|
if (list == null || list.isEmpty()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
DBSession session = PluginDBManager.getInstance().getDbContext().openSession(); |
||||||
|
session.beginTransaction();//开始事务
|
||||||
|
Set<String> set = list.stream().map(RolePathAuthEntity::getRole).collect(Collectors.toSet()); |
||||||
|
dao.remove(QueryFactory.create().addRestriction(RestrictionFactory.in("role", set))); |
||||||
|
for (RolePathAuthEntity e : list) { |
||||||
|
dao.addOrUpdate(e); |
||||||
|
} |
||||||
|
session.commitTransaction();//提交
|
||||||
|
session.closeSession(); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.debug4plugin(e.getMessage(), e); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static Integer delete(String role) { |
||||||
|
try { |
||||||
|
return AuthDBAccessProvider.getDbAccessor().runDMLAction(new DBAction<Integer>() { |
||||||
|
@Override |
||||||
|
public Integer run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(RolePathAuthDao.class).remove(QueryFactory.create().addRestriction(RestrictionFactory.eq("role", role))); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.debug4plugin(e.getMessage(), e); |
||||||
|
} |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
public static Set<String> getPathsByRole(Set<String> ids) { |
||||||
|
try { |
||||||
|
return AuthDBAccessProvider.getDbAccessor().runDMLAction(daoContext -> { |
||||||
|
List<RolePathAuthEntity> list = daoContext.getDAO(RolePathAuthDao.class).find(QueryFactory.create().addRestriction(RestrictionFactory.in("role", ids))); |
||||||
|
if (list == null || list.isEmpty()) { |
||||||
|
return new HashSet<>(); |
||||||
|
} |
||||||
|
return list.stream().map(RolePathAuthEntity::getPath).collect(Collectors.toSet()); |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.debug4plugin(e.getMessage(), e); |
||||||
|
} |
||||||
|
return new HashSet(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,86 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.conf; |
||||||
|
|
||||||
|
import com.fr.config.*; |
||||||
|
import com.fr.config.holder.Conf; |
||||||
|
import com.fr.config.holder.factory.Holders; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2021/12/04 |
||||||
|
*/ |
||||||
|
@Visualization(category = "门户集成") |
||||||
|
@EnableMetrics |
||||||
|
public class AuthSsoConfig extends DefaultConfiguration { |
||||||
|
|
||||||
|
private static volatile AuthSsoConfig config = null; |
||||||
|
|
||||||
|
public static AuthSsoConfig getInstance() { |
||||||
|
if (config == null) { |
||||||
|
config = ConfigContext.getConfigInstance(AuthSsoConfig.class); |
||||||
|
} |
||||||
|
return config; |
||||||
|
} |
||||||
|
|
||||||
|
@Identifier(value = "debugSwitch", name = "插件调试开关", description = "日志调试模式", status = Status.SHOW) |
||||||
|
private Conf<Boolean> debugSwitch = Holders.simple(true); |
||||||
|
|
||||||
|
@Identifier(value = "cookieKey", name = "cookie键值", description = "cookie键值", status = Status.SHOW) |
||||||
|
private Conf<String> cookieKey = Holders.simple("VDPUAT"); |
||||||
|
|
||||||
|
@Identifier(value = "validateUrl", name = "校验地址", description = "校验地址", status = Status.SHOW) |
||||||
|
private Conf<String> validateUrl = Holders.simple(""); |
||||||
|
|
||||||
|
@Identifier(value = "loginUrl", name = "登录接口地址", description = "登录接口地址", status = Status.SHOW) |
||||||
|
private Conf<String> envUrl = Holders.simple(""); |
||||||
|
|
||||||
|
public Boolean getDebugSwitch() { |
||||||
|
return this.debugSwitch.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setDebugSwitch(Boolean debugSwitch) { |
||||||
|
this.debugSwitch.set(debugSwitch); |
||||||
|
} |
||||||
|
|
||||||
|
public String getCookieKey() { |
||||||
|
return cookieKey.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setCookieKey(String cookieKey) { |
||||||
|
this.cookieKey.set(cookieKey); |
||||||
|
} |
||||||
|
|
||||||
|
public String getValidateUrl() { |
||||||
|
return validateUrl.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setValidateUrl(String validateUrl) { |
||||||
|
this.validateUrl.set(validateUrl); |
||||||
|
} |
||||||
|
|
||||||
|
public String getEnvUrl() { |
||||||
|
return envUrl.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setEnvUrl(String envUrl) { |
||||||
|
this.envUrl.set(envUrl); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public Object clone() throws CloneNotSupportedException { |
||||||
|
AuthSsoConfig cloned = (AuthSsoConfig) super.clone(); |
||||||
|
cloned.debugSwitch = (Conf<Boolean>) debugSwitch.clone(); |
||||||
|
cloned.cookieKey = (Conf<String>) cookieKey.clone(); |
||||||
|
cloned.validateUrl = (Conf<String>) validateUrl.clone(); |
||||||
|
cloned.envUrl = (Conf<String>) envUrl.clone(); |
||||||
|
return cloned; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public boolean isConfiged() { |
||||||
|
return StringUtils.isNotBlank(cookieKey.get()) && StringUtils.isNotBlank(validateUrl.get()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.xx.ltqc.auth.entity.RolePathAuthEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/14 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class RolePathAuthDao extends BaseDAO<RolePathAuthEntity> { |
||||||
|
public RolePathAuthDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Class<RolePathAuthEntity> getEntityClass() { |
||||||
|
return RolePathAuthEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,71 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.entity; |
||||||
|
|
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.stable.db.entity.TableAssociation; |
||||||
|
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 xx |
||||||
|
* @Date 2022/2/14 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
@Entity |
||||||
|
@Table(name = "plugin_role_path_auth") //表名
|
||||||
|
@TableAssociation(associated = true) |
||||||
|
public class RolePathAuthEntity extends BaseEntity { |
||||||
|
|
||||||
|
@Column(name = "role") |
||||||
|
private String role; |
||||||
|
@Column(name = "path") |
||||||
|
private String path; |
||||||
|
@Column(name = "create_time") |
||||||
|
private Date createTime; |
||||||
|
@Column(name = "create_user") |
||||||
|
private String createUser; |
||||||
|
|
||||||
|
public String getRole() { |
||||||
|
return role; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRole(String role) { |
||||||
|
this.role = role; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPath() { |
||||||
|
return path; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPath(String path) { |
||||||
|
this.path = path; |
||||||
|
} |
||||||
|
|
||||||
|
public Date getCreateTime() { |
||||||
|
return createTime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCreateTime(Date createTime) { |
||||||
|
this.createTime = createTime; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCreateUser() { |
||||||
|
return createUser; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCreateUser(String createUser) { |
||||||
|
this.createUser = createUser; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return "RolePathAuthEntity{" + |
||||||
|
"role='" + role + '\'' + |
||||||
|
", path='" + path + '\'' + |
||||||
|
", createTime=" + createTime + |
||||||
|
", createUser='" + createUser + '\'' + |
||||||
|
'}'; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,169 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.handler; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.base.constant.type.operation.ManualOperationType; |
||||||
|
import com.fr.decision.authority.data.CustomRole; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.base.util.UUIDUtil; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.privilege.encrpt.PasswordValidator; |
||||||
|
import com.fr.decision.webservice.bean.user.RoleBean; |
||||||
|
import com.fr.decision.webservice.bean.user.UserBean; |
||||||
|
import com.fr.decision.webservice.utils.UserSourceFactory; |
||||||
|
import com.fr.decision.webservice.v10.user.CustomRoleService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.io.utils.ResourceIOUtils; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.Constants; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.action.RolePathAuthService; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.entity.RolePathAuthEntity; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.UUID; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/13 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class AddRoleHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/auth/addRole"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) { |
||||||
|
try { |
||||||
|
res.setContentType("application/json; charset=UTF-8"); |
||||||
|
JSONObject body = parseRequest(req); |
||||||
|
String admin = UserService.getInstance().getAdminUserIdList().get(0); |
||||||
|
User user = UserService.getInstance().getUserByRequestCookie(req); |
||||||
|
if (body == null || body.isEmpty()) { |
||||||
|
WebUtils.printAsJSON(res, error("body is not null")); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (!body.has("roles")) { |
||||||
|
WebUtils.printAsJSON(res, error("role is not null")); |
||||||
|
return; |
||||||
|
} |
||||||
|
JSONObject role = body.getJSONObject("roles"); |
||||||
|
RoleBean roleBean = new RoleBean(); |
||||||
|
roleBean.setText(role.getString("text")); |
||||||
|
roleBean.setId(role.getString("id")); |
||||||
|
roleBean.setDescription(role.getString("description")); |
||||||
|
RoleBean customRole = CustomRoleService.getInstance().getCustomRole(roleBean.getId()); |
||||||
|
CustomRole customRole1 = (new CustomRole()).id(roleBean.getId()).name(roleBean.getText()).description(roleBean.getDescription()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
if (customRole == null) { |
||||||
|
LogUtils.debug4plugin("add role {}", customRole1); |
||||||
|
AuthorityContext.getInstance().getCustomRoleController().add(customRole1); |
||||||
|
} else { |
||||||
|
LogUtils.debug4plugin("edit role {}", customRole1); |
||||||
|
AuthorityContext.getInstance().getCustomRoleController().update(customRole1); |
||||||
|
} |
||||||
|
|
||||||
|
JSONArray users = body.getJSONArray("users"); |
||||||
|
for (int i = 0; i < users.size(); i++) { |
||||||
|
JSONObject object = users.getJSONObject(i); |
||||||
|
String id = object.getString("id"); |
||||||
|
User getUser = UserService.getInstance().getUserByUserId(id); |
||||||
|
UserBean userBean = new UserBean(); |
||||||
|
userBean.setUsername(object.getString("userName")); |
||||||
|
userBean.setRealName(object.getString("realName")); |
||||||
|
userBean.setEmail(object.getString("email")); |
||||||
|
userBean.setMobile(object.getString("mobile")); |
||||||
|
userBean.setId(id); |
||||||
|
List<RoleBean> roles = UserService.getInstance().getTargetUserRoles(admin, id); |
||||||
|
if (roles != null) { |
||||||
|
List<String> ids = roles.stream().map(RoleBean::getId).collect(Collectors.toList()); |
||||||
|
ids.add(roleBean.getId()); |
||||||
|
userBean.setRoleIds(ids.toArray(new String[0])); |
||||||
|
} else { |
||||||
|
userBean.setRoleIds(new String[]{roleBean.getId()}); |
||||||
|
} |
||||||
|
User user1 = (new User()).id(userBean.getId()).userName(userBean.getUsername()).realName(userBean.getRealName()).email(userBean.getEmail()).mobile(userBean.getMobile()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
if (getUser == null) { |
||||||
|
userBean.setPassword(UUID.randomUUID().toString()); |
||||||
|
String uuid = UUIDUtil.generate(); |
||||||
|
PasswordValidator validator = UserSourceFactory.getInstance().getUserSource(ManualOperationType.KEY).getPasswordValidator(); |
||||||
|
user1.password(validator.encode(userBean.getUsername(), userBean.getPassword(), uuid)).salt(uuid); |
||||||
|
LogUtils.debug4plugin("add user {}", user1); |
||||||
|
AuthorityContext.getInstance().getUserController().add(user1); |
||||||
|
} else { |
||||||
|
getUser.userName(userBean.getUsername()).realName(userBean.getRealName()).email(userBean.getEmail()).mobile(userBean.getMobile()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
LogUtils.debug4plugin("edit user {}", getUser); |
||||||
|
AuthorityContext.getInstance().getUserController().update(getUser); |
||||||
|
} |
||||||
|
UserService.getInstance().updateUserRoles(admin, userBean); |
||||||
|
} |
||||||
|
|
||||||
|
JSONArray paths = body.getJSONArray("paths"); |
||||||
|
List<RolePathAuthEntity> saves = new ArrayList<>(); |
||||||
|
for (int j = 0; j < paths.size(); j++) { |
||||||
|
JSONObject path = paths.getJSONObject(j); |
||||||
|
String realPath = Constants.ROOT + path.getString("path"); |
||||||
|
if (!ResourceIOUtils.exist(realPath)) { |
||||||
|
WebUtils.printAsJSON(res, error(String.format("cpt %s not exist", path))); |
||||||
|
return; |
||||||
|
} |
||||||
|
RolePathAuthEntity entity = new RolePathAuthEntity(); |
||||||
|
entity.setId(UUID.randomUUID().toString()); |
||||||
|
entity.setRole(roleBean.getId()); |
||||||
|
entity.setPath(path.getString("path")); |
||||||
|
entity.setCreateUser(user.getId()); |
||||||
|
entity.setCreateTime(new Date()); |
||||||
|
saves.add(entity); |
||||||
|
} |
||||||
|
LogUtils.debug4plugin("save role {} to paths {}", roleBean.getText(), saves.stream().map(e -> e.getPath()).collect(Collectors.joining(","))); |
||||||
|
RolePathAuthService.save(saves); |
||||||
|
WebUtils.printAsJSON(res, JSONObject.create().put("state", 0)); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(), e); |
||||||
|
try { |
||||||
|
WebUtils.printAsJSON(res, error(e.getMessage())); |
||||||
|
} catch (Exception ex) { |
||||||
|
LogUtils.error(ex.getMessage(), ex); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject error(String mess) { |
||||||
|
return JSONObject.create().put("state", 1).put("mess", mess); |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject parseRequest(HttpServletRequest request) { |
||||||
|
try { |
||||||
|
BufferedReader br = request.getReader(); |
||||||
|
String str = ""; |
||||||
|
String listString = ""; |
||||||
|
while ((str = br.readLine()) != null) { |
||||||
|
listString += str; |
||||||
|
} |
||||||
|
return new JSONObject(listString); |
||||||
|
} catch (Exception e) { |
||||||
|
return new JSONObject(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,123 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.handler; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.base.constant.type.operation.ManualOperationType; |
||||||
|
import com.fr.decision.authority.data.CustomRole; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.base.util.UUIDUtil; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.privilege.encrpt.PasswordValidator; |
||||||
|
import com.fr.decision.webservice.bean.user.UserBean; |
||||||
|
import com.fr.decision.webservice.bean.user.UserUpdateBean; |
||||||
|
import com.fr.decision.webservice.utils.UserSourceFactory; |
||||||
|
import com.fr.decision.webservice.v10.user.CustomRoleService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.util.List; |
||||||
|
import java.util.UUID; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/13 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class AddUserHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/auth/addUser"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) { |
||||||
|
try { |
||||||
|
res.setContentType("application/json; charset=UTF-8"); |
||||||
|
JSONObject body = parseRequest(req); |
||||||
|
String admin = UserService.getInstance().getAdminUserIdList().get(0); |
||||||
|
if (body == null || body.isEmpty()) { |
||||||
|
WebUtils.printAsJSON(res, error("body is not null")); |
||||||
|
return; |
||||||
|
} |
||||||
|
String id = body.getString("id"); |
||||||
|
User getUser = UserService.getInstance().getUserByUserId(id); |
||||||
|
UserBean userBean = new UserBean(); |
||||||
|
userBean.setUsername(body.getString("userName")); |
||||||
|
userBean.setRealName(body.getString("realName")); |
||||||
|
userBean.setEmail(body.getString("email")); |
||||||
|
userBean.setMobile(body.getString("mobile")); |
||||||
|
userBean.setId(id); |
||||||
|
String roleId = body.getString("roleId"); |
||||||
|
if (StringUtils.isNotBlank(roleId)) { |
||||||
|
userBean.setRoleIds(roleId.split(",")); |
||||||
|
} |
||||||
|
User user1 = (new User()).id(userBean.getId()).userName(userBean.getUsername()).realName(userBean.getRealName()).email(userBean.getEmail()).mobile(userBean.getMobile()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
if (getUser == null) { |
||||||
|
userBean.setPassword(UUID.randomUUID().toString()); |
||||||
|
String uuid = UUIDUtil.generate(); |
||||||
|
PasswordValidator validator = UserSourceFactory.getInstance().getUserSource(ManualOperationType.KEY).getPasswordValidator(); |
||||||
|
user1.password(validator.encode(userBean.getUsername(), userBean.getPassword(), uuid)).salt(uuid); |
||||||
|
AuthorityContext.getInstance().getUserController().add(user1); |
||||||
|
} else { |
||||||
|
getUser.userName(userBean.getUsername()).realName(userBean.getRealName()).email(userBean.getEmail()).mobile(userBean.getMobile()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
AuthorityContext.getInstance().getUserController().update(getUser); |
||||||
|
} |
||||||
|
LogUtils.debug4plugin("delete roles by user is {}",user1.getId()); |
||||||
|
List<CustomRole> customRolesByUser = CustomRoleService.getInstance().getCustomRolesByUser(user1.getId()); |
||||||
|
for (CustomRole role : customRolesByUser){ |
||||||
|
UserUpdateBean userUpdateBean = new UserUpdateBean(); |
||||||
|
userUpdateBean.setRemoveUserIds(new String[]{user1.getId()}); |
||||||
|
UserService.getInstance().updateRoleUsers(role.getId(), userUpdateBean); |
||||||
|
} |
||||||
|
/*AuthDBAccessProvider.getDbAccessor().runQueryAction((DBAction<Integer>) daoContext -> { |
||||||
|
daoContext.getDAO(UserRoleMiddleDAO.class).remove(QueryFactory.create().addRestriction(RestrictionFactory.eq("userId", user1.getId())).addRestriction(RestrictionFactory.eq("roleType", RoleType.CUSTOM))); |
||||||
|
return null; |
||||||
|
});*/ |
||||||
|
UserService.getInstance().updateUserRoles(admin, userBean); |
||||||
|
WebUtils.printAsJSON(res, JSONObject.create().put("state", 0)); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(), e); |
||||||
|
try { |
||||||
|
WebUtils.printAsJSON(res, error(e.getMessage())); |
||||||
|
} catch (Exception ex) { |
||||||
|
LogUtils.error(ex.getMessage(), ex); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject error(String mess) { |
||||||
|
return JSONObject.create().put("state", 1).put("mess", mess); |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject parseRequest(HttpServletRequest request) { |
||||||
|
try { |
||||||
|
BufferedReader br = request.getReader(); |
||||||
|
String str = ""; |
||||||
|
String listString = ""; |
||||||
|
while ((str = br.readLine()) != null) { |
||||||
|
listString += str; |
||||||
|
} |
||||||
|
return new JSONObject(listString); |
||||||
|
} catch (Exception e) { |
||||||
|
return new JSONObject(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.io.utils.ResourceIOUtils; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.Constants; |
||||||
|
import com.fr.third.guava.io.Files; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.File; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/13 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class CptListHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/cpt/list"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||||
|
JSONObject object = new JSONObject(); |
||||||
|
JSONArray path = getLetPath(Constants.ROOT); |
||||||
|
object.put("state", 0); |
||||||
|
object.put("data", path); |
||||||
|
response.setContentType("application/json; charset=UTF-8"); |
||||||
|
WebUtils.printAsJSON(response, object); |
||||||
|
} |
||||||
|
|
||||||
|
private JSONArray getLetPath(String path) { |
||||||
|
JSONArray array = new JSONArray(); |
||||||
|
String[] list = ResourceIOUtils.list(path); |
||||||
|
for (String name : list) { |
||||||
|
String curr = path + File.separator + name; |
||||||
|
if (ResourceIOUtils.isDirectory(curr)) { |
||||||
|
JSONArray childPath = getLetPath(curr); |
||||||
|
if (childPath != null || childPath.length() != 0) { |
||||||
|
for (int i = 0; i < childPath.length(); i++) { |
||||||
|
array.put(childPath.getJSONObject(i)); |
||||||
|
} |
||||||
|
} |
||||||
|
} else if ("cpt,frm".contains(Files.getFileExtension(curr))) { |
||||||
|
array.put(JSONObject.create().put("path", curr.replace(Constants.ROOT, ""))); |
||||||
|
} |
||||||
|
} |
||||||
|
return array; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,70 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.handler; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.data.CustomRole; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.user.CustomRoleService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.action.RolePathAuthService; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/13 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class DelRoleHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/auth/delRole"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) { |
||||||
|
try { |
||||||
|
res.setContentType("application/json; charset=UTF-8"); |
||||||
|
String role = WebUtils.getHTTPRequestParameter(req, "role"); |
||||||
|
CustomRole customRoles = AuthorityContext.getInstance().getCustomRoleController().getById(role); |
||||||
|
if (StringUtils.isBlank(role)) { |
||||||
|
WebUtils.printAsJSON(res, error("role is not null")); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (customRoles == null) { |
||||||
|
WebUtils.printAsJSON(res, error(String.format("role %s not exist", role))); |
||||||
|
return; |
||||||
|
} |
||||||
|
CustomRoleService.getInstance().deleteCustomRole(role); |
||||||
|
RolePathAuthService.delete(role); |
||||||
|
WebUtils.printAsJSON(res, JSONObject.create().put("state", 0)); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(), e); |
||||||
|
try { |
||||||
|
WebUtils.printAsJSON(res, error(e.getMessage())); |
||||||
|
} catch (Exception ex) { |
||||||
|
LogUtils.error(ex.getMessage(), ex); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject error(String mess) { |
||||||
|
return JSONObject.create().put("state", 1).put("mess", mess); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,173 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.handler; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.base.constant.type.operation.ManualOperationType; |
||||||
|
import com.fr.decision.authority.data.CustomRole; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.base.util.UUIDUtil; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.privilege.encrpt.PasswordValidator; |
||||||
|
import com.fr.decision.webservice.bean.user.RoleBean; |
||||||
|
import com.fr.decision.webservice.bean.user.UserBean; |
||||||
|
import com.fr.decision.webservice.bean.user.UserUpdateBean; |
||||||
|
import com.fr.decision.webservice.utils.UserSourceFactory; |
||||||
|
import com.fr.decision.webservice.v10.user.CustomRoleService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.io.utils.ResourceIOUtils; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.Constants; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.action.RolePathAuthService; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.entity.RolePathAuthEntity; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.utils.LogUtils; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.data.DataList; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.UUID; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author xx |
||||||
|
* @Date 2022/2/13 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class EditRoleHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/auth/editRole"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) { |
||||||
|
try { |
||||||
|
res.setContentType("application/json; charset=UTF-8"); |
||||||
|
JSONObject body = parseRequest(req); |
||||||
|
String admin = UserService.getInstance().getAdminUserIdList().get(0); |
||||||
|
User user = UserService.getInstance().getUserByRequestCookie(req); |
||||||
|
if (body == null || body.isEmpty()) { |
||||||
|
WebUtils.printAsJSON(res, error("body is not null")); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (!body.has("roles")) { |
||||||
|
WebUtils.printAsJSON(res, error("role is not null")); |
||||||
|
return; |
||||||
|
} |
||||||
|
JSONObject role = body.getJSONObject("roles"); |
||||||
|
RoleBean roleBean = new RoleBean(); |
||||||
|
roleBean.setText(role.getString("text")); |
||||||
|
roleBean.setId(role.getString("id")); |
||||||
|
roleBean.setDescription(role.getString("description")); |
||||||
|
RoleBean customRole = CustomRoleService.getInstance().getCustomRole(roleBean.getId()); |
||||||
|
CustomRole customRole1 = (new CustomRole()).id(roleBean.getId()).name(roleBean.getText()).description(roleBean.getDescription()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
if (customRole == null) { |
||||||
|
AuthorityContext.getInstance().getCustomRoleController().add(customRole1); |
||||||
|
} else { |
||||||
|
AuthorityContext.getInstance().getCustomRoleController().update(customRole1); |
||||||
|
} |
||||||
|
//删除所有的用户
|
||||||
|
LogUtils.debug4plugin("delete roles by roles is {}",customRole.getId()); |
||||||
|
DataList<User> roleUser = AuthorityContext.getInstance().getUserController().findByCustomRole(customRole.getId(), QueryFactory.create()); |
||||||
|
UserUpdateBean userUpdateBean = new UserUpdateBean(); |
||||||
|
userUpdateBean.setRemoveUserIds(roleUser.getList().stream().map(User::getId).collect(Collectors.toList()).toArray(new String[0])); |
||||||
|
UserService.getInstance().updateRoleUsers(customRole.getId(), userUpdateBean); |
||||||
|
|
||||||
|
JSONArray users = body.getJSONArray("users"); |
||||||
|
for (int i = 0; i < users.size(); i++) { |
||||||
|
JSONObject object = users.getJSONObject(i); |
||||||
|
String id = object.getString("id"); |
||||||
|
User getUser = UserService.getInstance().getUserByUserId(id); |
||||||
|
UserBean userBean = new UserBean(); |
||||||
|
userBean.setUsername(object.getString("userName")); |
||||||
|
userBean.setRealName(object.getString("realName")); |
||||||
|
userBean.setEmail(object.getString("email")); |
||||||
|
userBean.setMobile(object.getString("mobile")); |
||||||
|
userBean.setId(id); |
||||||
|
List<RoleBean> roles = UserService.getInstance().getTargetUserRoles(admin, id); |
||||||
|
if (roles != null) { |
||||||
|
List<String> ids = roles.stream().map(RoleBean::getId).collect(Collectors.toList()); |
||||||
|
ids.add(roleBean.getId()); |
||||||
|
userBean.setRoleIds(ids.toArray(new String[0])); |
||||||
|
} else { |
||||||
|
userBean.setRoleIds(new String[]{roleBean.getId()}); |
||||||
|
} |
||||||
|
User user1 = (new User()).id(userBean.getId()).userName(userBean.getUsername()).realName(userBean.getRealName()).email(userBean.getEmail()).mobile(userBean.getMobile()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
if (getUser == null) { |
||||||
|
userBean.setPassword(UUID.randomUUID().toString()); |
||||||
|
String uuid = UUIDUtil.generate(); |
||||||
|
PasswordValidator validator = UserSourceFactory.getInstance().getUserSource(ManualOperationType.KEY).getPasswordValidator(); |
||||||
|
user1.password(validator.encode(userBean.getUsername(), userBean.getPassword(), uuid)).salt(uuid); |
||||||
|
AuthorityContext.getInstance().getUserController().add(user1); |
||||||
|
} else { |
||||||
|
getUser.userName(userBean.getUsername()).realName(userBean.getRealName()).email(userBean.getEmail()).mobile(userBean.getMobile()).creationType(ManualOperationType.KEY).lastOperationType(ManualOperationType.KEY).enable(true); |
||||||
|
AuthorityContext.getInstance().getUserController().update(getUser); |
||||||
|
} |
||||||
|
UserService.getInstance().updateUserRoles(admin, userBean); |
||||||
|
} |
||||||
|
|
||||||
|
JSONArray paths = body.getJSONArray("paths"); |
||||||
|
List<RolePathAuthEntity> saves = new ArrayList<>(); |
||||||
|
for (int j = 0; j < paths.size(); j++) { |
||||||
|
JSONObject path = paths.getJSONObject(j); |
||||||
|
String realPath = Constants.ROOT + path.getString("path"); |
||||||
|
if (!ResourceIOUtils.exist(realPath)) { |
||||||
|
WebUtils.printAsJSON(res, error(String.format("cpt %s not exist", path))); |
||||||
|
return; |
||||||
|
} |
||||||
|
RolePathAuthEntity entity = new RolePathAuthEntity(); |
||||||
|
entity.setId(UUID.randomUUID().toString()); |
||||||
|
entity.setRole(roleBean.getId()); |
||||||
|
entity.setPath(path.getString("path")); |
||||||
|
entity.setCreateUser(user.getId()); |
||||||
|
entity.setCreateTime(new Date()); |
||||||
|
saves.add(entity); |
||||||
|
} |
||||||
|
RolePathAuthService.save(saves); |
||||||
|
WebUtils.printAsJSON(res, JSONObject.create().put("state", 0)); |
||||||
|
} catch (Exception e) { |
||||||
|
LogUtils.error(e.getMessage(), e); |
||||||
|
try { |
||||||
|
WebUtils.printAsJSON(res, error(e.getMessage())); |
||||||
|
} catch (Exception ex) { |
||||||
|
LogUtils.error(ex.getMessage(), ex); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject error(String mess) { |
||||||
|
return JSONObject.create().put("state", 1).put("mess", mess); |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject parseRequest(HttpServletRequest request) { |
||||||
|
try { |
||||||
|
BufferedReader br = request.getReader(); |
||||||
|
String str = ""; |
||||||
|
String listString = ""; |
||||||
|
while ((str = br.readLine()) != null) { |
||||||
|
listString += str; |
||||||
|
} |
||||||
|
return new JSONObject(listString); |
||||||
|
} catch (Exception e) { |
||||||
|
return new JSONObject(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,139 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.utils; |
||||||
|
|
||||||
|
import com.fr.data.NetworkHelper; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||||
|
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||||
|
import com.fr.decision.webservice.utils.DecisionStatusService; |
||||||
|
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.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.web.Device; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Properties; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2021/8/24 |
||||||
|
*/ |
||||||
|
public class CommonUtils { |
||||||
|
|
||||||
|
public static String getProperty(Properties props, String key, String defaultValue, boolean allowBlank) { |
||||||
|
String value = props.getProperty(key); |
||||||
|
if (StringUtils.isNotBlank(value)) { |
||||||
|
return value; |
||||||
|
} else { |
||||||
|
if (allowBlank) { |
||||||
|
LogUtils.warn("Property[" + key + "] value is blank."); |
||||||
|
return defaultValue; |
||||||
|
} else { |
||||||
|
throw new IllegalArgumentException("Property[" + key + "] cann't be blank."); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static String getProperty(Properties props, String key, boolean allowBlank) { |
||||||
|
return getProperty(props, key, null, allowBlank); |
||||||
|
} |
||||||
|
|
||||||
|
public static String getProperty(Properties props, String key) { |
||||||
|
return getProperty(props, key, null, true); |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean isLogin(HttpServletRequest request) { |
||||||
|
String oldToken = TokenResource.COOKIE.getToken(request); |
||||||
|
return oldToken != null && checkTokenValid(request, (String) oldToken); |
||||||
|
} |
||||||
|
|
||||||
|
private static 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; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 跳转到过滤器链中的下一个过滤器 |
||||||
|
* |
||||||
|
* @param request |
||||||
|
* @param response |
||||||
|
* @param chain |
||||||
|
*/ |
||||||
|
public static void next(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { |
||||||
|
try { |
||||||
|
chain.doFilter(request, response); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(),e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void login(String username, HttpServletRequest request, HttpServletResponse response) { |
||||||
|
try { |
||||||
|
User user = UserService.getInstance().getUserByUserName(username); |
||||||
|
String token = LoginService.getInstance().login(request, response, user.getUserName()); |
||||||
|
request.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, token); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("sso >> Failed to login with[" + username + "]", e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean checkUser(String username) { |
||||||
|
try { |
||||||
|
User user = UserService.getInstance().getUserByUserName(username); |
||||||
|
return user != null; |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(),e); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static boolean isMobileDevice(HttpServletRequest request) { |
||||||
|
if (WebUtils.getDevice(request).isMobile()) { |
||||||
|
LogUtils.debug4plugin("current request is is mobile request ,url is {}", request.getRequestURI()); |
||||||
|
return true; |
||||||
|
} |
||||||
|
String requestHeader = request.getHeader("user-agent"); |
||||||
|
String[] deviceArray = new String[]{"android", "iphone", "ipad", "ios", "windows phone", "wechat"}; |
||||||
|
if (requestHeader == null) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
requestHeader = requestHeader.toLowerCase(); |
||||||
|
for (int i = 0; i < deviceArray.length; i++) { |
||||||
|
if (requestHeader.toLowerCase().contains(deviceArray[i])) { |
||||||
|
LogUtils.debug4plugin("current request:{} is mobile request!", request.getRequestURI()); |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
String op = WebUtils.getHTTPRequestParameter(request, "op"); |
||||||
|
return StringUtils.isNotBlank(op) && StringUtils.equals("h5", op); |
||||||
|
} |
||||||
|
|
||||||
|
public static void cacheParams(String key, Map<String, String> values) { |
||||||
|
try { |
||||||
|
DecisionStatusService.originUrlStatusService().put(key, values); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static String getCachedParam(String key, String name) { |
||||||
|
try { |
||||||
|
Map<String, String> values = DecisionStatusService.originUrlStatusService().get(key); |
||||||
|
return values.get(name); |
||||||
|
} catch (Exception e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.utils; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.Cookie; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2022/02/14 |
||||||
|
*/ |
||||||
|
public class CookieUtils { |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据name获取cookie |
||||||
|
* @param request |
||||||
|
* @param name |
||||||
|
* @return cookie对象 |
||||||
|
*/ |
||||||
|
public static Cookie getCookie(HttpServletRequest request, String name) { |
||||||
|
Cookie[] cookies = request.getCookies(); |
||||||
|
if (cookies == null || name == null || name.length() == 0) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
Cookie cookie = null; |
||||||
|
for (int i = 0; i < cookies.length; i++) { |
||||||
|
if (cookies[i].getName().equals(name)) { |
||||||
|
cookie = cookies[i]; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
return cookie; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 新增cookie,过期时间为页面关闭 |
||||||
|
* @param response |
||||||
|
* @param name |
||||||
|
* @param value |
||||||
|
* @param domain |
||||||
|
*/ |
||||||
|
public static void setCookie(HttpServletResponse response, String name, |
||||||
|
String value, String domain) { |
||||||
|
if (value == null) { |
||||||
|
value = ""; |
||||||
|
} |
||||||
|
Cookie cookie = new Cookie(name, value); |
||||||
|
if (!StringUtils.isEmpty(domain)) { |
||||||
|
cookie.setDomain(domain); |
||||||
|
} |
||||||
|
cookie.setPath("/"); |
||||||
|
response.addCookie(cookie); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,330 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.utils; |
||||||
|
|
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.http.HttpResponse; |
||||||
|
import com.fr.third.org.apache.http.HttpStatus; |
||||||
|
import com.fr.third.org.apache.http.NameValuePair; |
||||||
|
import com.fr.third.org.apache.http.client.HttpClient; |
||||||
|
import com.fr.third.org.apache.http.client.entity.UrlEncodedFormEntity; |
||||||
|
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||||
|
import com.fr.third.org.apache.http.config.Registry; |
||||||
|
import com.fr.third.org.apache.http.config.RegistryBuilder; |
||||||
|
import com.fr.third.org.apache.http.conn.socket.ConnectionSocketFactory; |
||||||
|
import com.fr.third.org.apache.http.conn.socket.LayeredConnectionSocketFactory; |
||||||
|
import com.fr.third.org.apache.http.conn.socket.PlainConnectionSocketFactory; |
||||||
|
import com.fr.third.org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
||||||
|
import com.fr.third.org.apache.http.conn.ssl.SSLContexts; |
||||||
|
import com.fr.third.org.apache.http.conn.ssl.TrustStrategy; |
||||||
|
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||||
|
import com.fr.third.org.apache.http.impl.client.HttpClientBuilder; |
||||||
|
import com.fr.third.org.apache.http.impl.conn.PoolingHttpClientConnectionManager; |
||||||
|
import com.fr.third.org.apache.http.message.BasicNameValuePair; |
||||||
|
import com.fr.third.org.apache.http.util.EntityUtils; |
||||||
|
|
||||||
|
import javax.net.ssl.HostnameVerifier; |
||||||
|
import javax.net.ssl.HttpsURLConnection; |
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.net.ssl.SSLSession; |
||||||
|
import java.io.*; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.security.KeyManagementException; |
||||||
|
import java.security.KeyStore; |
||||||
|
import java.security.KeyStoreException; |
||||||
|
import java.security.NoSuchAlgorithmException; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author hujian |
||||||
|
* @Date 2020/12/05 |
||||||
|
* @Description |
||||||
|
**/ |
||||||
|
public class HttpUtil { |
||||||
|
|
||||||
|
private static HostnameVerifier hv = new HostnameVerifier() { |
||||||
|
@Override |
||||||
|
public boolean verify(String urlHostName, SSLSession session) { |
||||||
|
System.out.println("Warning: URL Host: " + urlHostName + " vs. " |
||||||
|
+ session.getPeerHost()); |
||||||
|
return true; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
* 发送get请求 |
||||||
|
* |
||||||
|
* @param url |
||||||
|
* @param param |
||||||
|
* @param header |
||||||
|
* @return |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public static String sendGet(String url, Map<String, String> param, Map<String, String> header) { |
||||||
|
String result = ""; |
||||||
|
BufferedReader in = null; |
||||||
|
String urlNameString = url; |
||||||
|
try { |
||||||
|
if (param != null) { |
||||||
|
urlNameString += "?"; |
||||||
|
urlNameString += param.entrySet() |
||||||
|
.stream() |
||||||
|
.map(entry -> entry.getKey() + "=" + entry.getValue()) |
||||||
|
.collect(Collectors.joining("&")); |
||||||
|
} |
||||||
|
|
||||||
|
URL realUrl = new URL(urlNameString); |
||||||
|
// 打开和URL之间的连接
|
||||||
|
HttpURLConnection connection; |
||||||
|
if (url.startsWith("https")) { |
||||||
|
trustAllHttpsCertificates(); |
||||||
|
HttpsURLConnection.setDefaultHostnameVerifier(hv); |
||||||
|
connection = (HttpURLConnection) realUrl.openConnection(); |
||||||
|
} else { |
||||||
|
connection = (HttpURLConnection) realUrl.openConnection(); |
||||||
|
} |
||||||
|
//设置超时时间
|
||||||
|
connection.setDoInput(true); |
||||||
|
connection.setRequestMethod("GET"); |
||||||
|
connection.setConnectTimeout(5000); |
||||||
|
connection.setReadTimeout(15000); |
||||||
|
// 设置通用的请求属性
|
||||||
|
if (header != null) { |
||||||
|
Iterator<Map.Entry<String, String>> it = header.entrySet().iterator(); |
||||||
|
while (it.hasNext()) { |
||||||
|
Map.Entry<String, String> entry = it.next(); |
||||||
|
System.out.println(entry.getKey() + ":::" + entry.getValue()); |
||||||
|
connection.setRequestProperty(entry.getKey(), entry.getValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
connection.setRequestProperty("accept", "*/*"); |
||||||
|
connection.setRequestProperty("connection", "Keep-Alive"); |
||||||
|
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
||||||
|
// 建立实际的连接
|
||||||
|
connection.connect(); |
||||||
|
// 定义 BufferedReader输入流来读取URL的响应,设置utf8防止中文乱码
|
||||||
|
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8")); |
||||||
|
String line; |
||||||
|
while ((line = in.readLine()) != null) { |
||||||
|
result += line; |
||||||
|
} |
||||||
|
if (in != null) { |
||||||
|
in.close(); |
||||||
|
} |
||||||
|
}catch (Exception e){ |
||||||
|
FineLoggerFactory.getLogger().error(e,"get url error ,url is:{},error is {}",urlNameString,e.getMessage()); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public static String sendPost(String url,Map<String,String> header, JSONObject body) { |
||||||
|
PrintWriter out = null; |
||||||
|
BufferedReader in = null; |
||||||
|
String result = StringUtils.EMPTY; |
||||||
|
String res = StringUtils.EMPTY; |
||||||
|
try { |
||||||
|
String urlNameString = url; |
||||||
|
|
||||||
|
URL realUrl = new URL(urlNameString); |
||||||
|
// 打开和URL之间的连接
|
||||||
|
HttpURLConnection conn; |
||||||
|
if (url.startsWith("https")) { |
||||||
|
trustAllHttpsCertificates(); |
||||||
|
HttpsURLConnection.setDefaultHostnameVerifier(hv); |
||||||
|
conn = (HttpURLConnection) realUrl.openConnection(); |
||||||
|
} else { |
||||||
|
conn = (HttpURLConnection) realUrl.openConnection(); |
||||||
|
} |
||||||
|
// 设置通用的请求属性
|
||||||
|
conn.setRequestProperty("accept", "*/*"); |
||||||
|
conn.setRequestProperty("connection", "Keep-Alive"); |
||||||
|
conn.setRequestProperty("user-agent", |
||||||
|
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
||||||
|
conn.setRequestProperty("Content-Type","application/json;;charset=UTF-8"); |
||||||
|
//conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork");
|
||||||
|
if(header != null){ |
||||||
|
header.forEach((k, v) -> { |
||||||
|
conn.setRequestProperty(k, v); |
||||||
|
}); |
||||||
|
} |
||||||
|
// 发送POST请求必须设置如下两行
|
||||||
|
conn.setDoOutput(true); |
||||||
|
conn.setDoInput(true); |
||||||
|
//获取请求头
|
||||||
|
|
||||||
|
// 获取URLConnection对象对应的输出流
|
||||||
|
out = new PrintWriter(conn.getOutputStream()); |
||||||
|
StringBuffer buffer = new StringBuffer(); |
||||||
|
|
||||||
|
// 发送请求参数
|
||||||
|
if(body != null){ |
||||||
|
out.print(body.toString()); |
||||||
|
} |
||||||
|
// flush输出流的缓冲
|
||||||
|
out.flush(); |
||||||
|
// 定义BufferedReader输入流来读取URL的响应
|
||||||
|
in = new BufferedReader( |
||||||
|
new InputStreamReader(conn.getInputStream())); |
||||||
|
String line; |
||||||
|
while ((line = in.readLine()) != null) { |
||||||
|
result += line; |
||||||
|
} |
||||||
|
res = result; |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(),e); |
||||||
|
} |
||||||
|
//使用finally块来关闭输出流、输入流
|
||||||
|
finally{ |
||||||
|
try{ |
||||||
|
if(out!=null){ |
||||||
|
out.close(); |
||||||
|
} |
||||||
|
if(in!=null){ |
||||||
|
in.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
catch(IOException e){ |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(),e); |
||||||
|
} |
||||||
|
} |
||||||
|
return res; |
||||||
|
} |
||||||
|
|
||||||
|
private static void trustAllHttpsCertificates() throws Exception { |
||||||
|
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; |
||||||
|
javax.net.ssl.TrustManager tm = new miTM(); |
||||||
|
trustAllCerts[0] = tm; |
||||||
|
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL","SunJSSE"); |
||||||
|
sc.init(null, trustAllCerts, null); |
||||||
|
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String doFormPost(String url,Map<String, Object> header, Map<String, Object> map, String chartset) { |
||||||
|
//声明返回结果
|
||||||
|
String result = ""; |
||||||
|
UrlEncodedFormEntity entity = null; |
||||||
|
HttpResponse httpResponse = null; |
||||||
|
HttpClient httpClient = null; |
||||||
|
try { |
||||||
|
// 创建连接
|
||||||
|
httpClient = getHttpsClient(); |
||||||
|
; |
||||||
|
|
||||||
|
// 设置请求头和报文
|
||||||
|
HttpPost httpPost = new HttpPost(url); |
||||||
|
if (header != null) { |
||||||
|
header.forEach((k, v) -> { |
||||||
|
httpPost.setHeader(k, v.toString()); |
||||||
|
}); |
||||||
|
} |
||||||
|
//设置参数
|
||||||
|
List<NameValuePair> list = new ArrayList<NameValuePair>(); |
||||||
|
Iterator iterator = map.entrySet().iterator(); |
||||||
|
while (iterator.hasNext()) { |
||||||
|
Map.Entry<String, String> elem = (Map.Entry<String, String>) iterator.next(); |
||||||
|
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue())); |
||||||
|
} |
||||||
|
entity = new UrlEncodedFormEntity(list, chartset == null ? "UTF-8" : chartset); |
||||||
|
httpPost.setEntity(entity); |
||||||
|
//执行发送,获取相应结果
|
||||||
|
httpResponse = httpClient.execute(httpPost); |
||||||
|
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { |
||||||
|
result = EntityUtils.toString(httpResponse.getEntity()); |
||||||
|
} else { |
||||||
|
FineLoggerFactory.getLogger().error("Http post form code is {},message is {}", httpResponse.getStatusLine().getStatusCode(), EntityUtils.toString(httpResponse.getEntity())); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return result; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private static CloseableHttpClient getHttpsClient() { |
||||||
|
RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create(); |
||||||
|
ConnectionSocketFactory plainSF = new PlainConnectionSocketFactory(); |
||||||
|
registryBuilder.register("http", plainSF); |
||||||
|
// 指定信任密钥存储对象和连接套接字工厂
|
||||||
|
try { |
||||||
|
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); |
||||||
|
// 信任任何链接
|
||||||
|
TrustStrategy anyTrustStrategy = new TrustStrategy() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true; |
||||||
|
} |
||||||
|
}; |
||||||
|
SSLContext sslContext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, anyTrustStrategy).build(); |
||||||
|
LayeredConnectionSocketFactory sslSF = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); |
||||||
|
registryBuilder.register("https", sslSF); |
||||||
|
} catch (KeyStoreException e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} catch (KeyManagementException e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} catch (NoSuchAlgorithmException e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} |
||||||
|
Registry<ConnectionSocketFactory> registry = registryBuilder.build(); |
||||||
|
// 设置连接管理器
|
||||||
|
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry); |
||||||
|
// 构建客户端
|
||||||
|
return HttpClientBuilder.create().setConnectionManager(connManager).build(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* encode url by UTF-8 |
||||||
|
* @param url url before encoding |
||||||
|
* @return url after encoding |
||||||
|
*/ |
||||||
|
public static String encodeUrl(String url){ |
||||||
|
String eurl = url; |
||||||
|
try { |
||||||
|
eurl = URLEncoder.encode(url,"UTF-8"); |
||||||
|
} catch (UnsupportedEncodingException e) { |
||||||
|
} |
||||||
|
return eurl; |
||||||
|
} |
||||||
|
|
||||||
|
private static class miTM implements javax.net.ssl.TrustManager, |
||||||
|
javax.net.ssl.X509TrustManager { |
||||||
|
@Override |
||||||
|
public java.security.cert.X509Certificate[] getAcceptedIssuers() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isServerTrusted( |
||||||
|
java.security.cert.X509Certificate[] certs) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isClientTrusted( |
||||||
|
java.security.cert.X509Certificate[] certs) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkServerTrusted( |
||||||
|
java.security.cert.X509Certificate[] certs, String authType) |
||||||
|
throws java.security.cert.CertificateException { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkClientTrusted( |
||||||
|
java.security.cert.X509Certificate[] certs, String authType) |
||||||
|
throws java.security.cert.CertificateException { |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,122 @@ |
|||||||
|
package com.fr.plugin.xx.ltqc.auth.utils; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.log.FineLoggerProvider; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.Constants; |
||||||
|
import com.fr.plugin.xx.ltqc.auth.conf.AuthSsoConfig; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author xx |
||||||
|
* @since 2021/12/04 |
||||||
|
*/ |
||||||
|
public final class LogUtils { |
||||||
|
private static final String DEBUG_PREFIX = "[插件调试] "; |
||||||
|
private static String LOG_PREFIX = Constants.PLUGIN_NAME; |
||||||
|
private static final String PLUGIN_VERSION; |
||||||
|
|
||||||
|
private static final FineLoggerProvider LOGGER = FineLoggerFactory.getLogger(); |
||||||
|
|
||||||
|
static { |
||||||
|
String version = PluginContexts.currentContext().getMarker().getVersion(); |
||||||
|
if (StringUtils.isNotBlank(version)) { |
||||||
|
PLUGIN_VERSION = "[v" + version + "] "; |
||||||
|
} else { |
||||||
|
PLUGIN_VERSION = "[unknown version] "; |
||||||
|
} |
||||||
|
|
||||||
|
LOG_PREFIX = LOG_PREFIX + PLUGIN_VERSION; |
||||||
|
} |
||||||
|
|
||||||
|
public static void setPrefix(String prefix) { |
||||||
|
if (prefix != null) { |
||||||
|
LOG_PREFIX = prefix; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean isDebugEnabled() { |
||||||
|
return LOGGER.isDebugEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void debug(String s) { |
||||||
|
LOGGER.debug(LOG_PREFIX + s); |
||||||
|
} |
||||||
|
|
||||||
|
public static void debug(String s, Object... objects) { |
||||||
|
LOGGER.debug(LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
|
||||||
|
public static void debug(String s, Throwable throwable) { |
||||||
|
LOGGER.debug(LOG_PREFIX + s, throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public static void debug4plugin(String s) { |
||||||
|
if (AuthSsoConfig.getInstance().getDebugSwitch()) { |
||||||
|
LOGGER.error(DEBUG_PREFIX + LOG_PREFIX + s); |
||||||
|
} else { |
||||||
|
LOGGER.debug(LOG_PREFIX + s); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void debug4plugin(String s, Object... objects) { |
||||||
|
if (AuthSsoConfig.getInstance().getDebugSwitch()) { |
||||||
|
LOGGER.error(DEBUG_PREFIX + LOG_PREFIX + s, objects); |
||||||
|
} else { |
||||||
|
LOGGER.debug(LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void debug4plugin(String s, Throwable throwable) { |
||||||
|
if (AuthSsoConfig.getInstance().getDebugSwitch()) { |
||||||
|
LOGGER.error(DEBUG_PREFIX + LOG_PREFIX + s, throwable); |
||||||
|
} else { |
||||||
|
LOGGER.debug(LOG_PREFIX + s, throwable); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static boolean isInfoEnabled() { |
||||||
|
return LOGGER.isInfoEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void info(String s) { |
||||||
|
LOGGER.info(LOG_PREFIX + s); |
||||||
|
} |
||||||
|
|
||||||
|
public static void info(String s, Object... objects) { |
||||||
|
LOGGER.info(LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
|
||||||
|
public static void warn(String s) { |
||||||
|
LOGGER.warn(LOG_PREFIX + s); |
||||||
|
} |
||||||
|
|
||||||
|
public static void warn(String s, Object... objects) { |
||||||
|
LOGGER.warn(LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
|
||||||
|
public static void warn(String s, Throwable throwable) { |
||||||
|
LOGGER.warn(LOG_PREFIX + s, throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public static void warn(Throwable throwable, String s, Object... objects) { |
||||||
|
LOGGER.warn(throwable, LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
|
||||||
|
public static void error(String s) { |
||||||
|
LOGGER.error(LOG_PREFIX + s); |
||||||
|
} |
||||||
|
|
||||||
|
public static void error(String s, Object... objects) { |
||||||
|
LOGGER.error(LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
|
||||||
|
public static void error(String s, Throwable throwable) { |
||||||
|
LOGGER.error(LOG_PREFIX + s, throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public static void error(Throwable throwable, String s, Object... objects) { |
||||||
|
LOGGER.error(throwable, LOG_PREFIX + s, objects); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue