LAPTOP-SB56SG4Q\86185
3 years ago
38 changed files with 2271 additions and 1 deletions
Binary file not shown.
@ -1,3 +1,6 @@ |
|||||||
# open-JSD-8173 |
# open-JSD-8173 |
||||||
|
|
||||||
JSD-8173 开源任务材料 |
JSD-8173开源任务材料\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 |
@ -0,0 +1,33 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||||
|
<id>com.fr.plugin.login</id> |
||||||
|
<name><![CDATA[登录认证]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.0.9</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2018-07-31</jartime> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<description><![CDATA[登录认证]]></description> |
||||||
|
<main-package>com.fr.plugin.login</main-package> |
||||||
|
<change-notes> |
||||||
|
<![CDATA[ |
||||||
|
[2021-05-12]10.4.982: |
||||||
|
修复bug<br/> |
||||||
|
]]> |
||||||
|
</change-notes> |
||||||
|
<function-recorder class="com.fr.plugin.login.config.simple.account.PluginSimpleConfig"/> |
||||||
|
<lifecycle-monitor class="com.fr.plugin.login.config.simple.DemoInitializeMonitor"/> |
||||||
|
|
||||||
|
<extra-decision> |
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.login.interception.filter.IpInterceptionFilter"/> |
||||||
|
<DecisionDBAccessProvider class="com.fr.plugin.login.interception.IpInterceptionDBAccessProvider"/> |
||||||
|
<HttpHandlerProvider class="com.fr.plugin.login.handler.ExtendAttrHandlerProvider"/> |
||||||
|
<URLAliasProvider class="com.fr.plugin.login.handler.URLAliasProvide"/> |
||||||
|
<WebResourceProvider class="com.fr.plugin.login.webresource.WebResourceProvider"/> |
||||||
|
</extra-decision> |
||||||
|
<extra-core> |
||||||
|
<LocaleFinder class="com.fr.plugin.login.interception.IpInterceptionLocalFinder"/> |
||||||
|
</extra-core> |
||||||
|
<dependence> |
||||||
|
<Item key="com.fr.plugin.weixin" type="plugin"/> |
||||||
|
</dependence> |
||||||
|
</plugin> |
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.plugin.login.config.simple; |
||||||
|
|
||||||
|
import com.fr.plugin.context.PluginContext; |
||||||
|
import com.fr.plugin.login.config.simple.account.PluginSimpleConfig; |
||||||
|
import com.fr.plugin.login.interception.config.IpInterceptionConfig; |
||||||
|
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author richie |
||||||
|
* @version 10.0 |
||||||
|
* Created by richie on 2018-12-04 |
||||||
|
*/ |
||||||
|
public class DemoInitializeMonitor extends AbstractPluginLifecycleMonitor { |
||||||
|
@Override |
||||||
|
public void afterRun(PluginContext pluginContext) { |
||||||
|
PluginSimpleConfig.getInstance(); |
||||||
|
IpInterceptionConfig.getInstance(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void beforeStop(PluginContext pluginContext) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
package com.fr.plugin.login.config.simple.account; |
||||||
|
|
||||||
|
import com.fr.config.*; |
||||||
|
import com.fr.config.holder.Conf; |
||||||
|
import com.fr.config.holder.factory.Holders; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
|
||||||
|
@Visualization(category = "微信鉴权配置") |
||||||
|
@EnableMetrics |
||||||
|
public class PluginSimpleConfig extends DefaultConfiguration { |
||||||
|
|
||||||
|
private static volatile PluginSimpleConfig config = null; |
||||||
|
|
||||||
|
@Focus(id="com.fr.plugin.login.config.simple", text = "微信鉴权配置", source = Original.PLUGIN) |
||||||
|
public static PluginSimpleConfig getInstance() { |
||||||
|
if (config == null) { |
||||||
|
config = ConfigContext.getConfigInstance(PluginSimpleConfig.class); |
||||||
|
} |
||||||
|
return config; |
||||||
|
} |
||||||
|
|
||||||
|
@Identifier(value = "appId", name = "appId", description = "appId", status = Status.SHOW) |
||||||
|
private Conf<String> appId = Holders.simple(""); |
||||||
|
|
||||||
|
@Identifier(value = "agentId", name = "agentId", description = "agentId", status = Status.SHOW) |
||||||
|
private Conf<String> agentId = Holders.simple(""); |
||||||
|
|
||||||
|
@Identifier(value = "secret", name = "secret", description = "secret", status = Status.SHOW) |
||||||
|
private Conf<String> secret = Holders.simple(""); |
||||||
|
|
||||||
|
@Identifier(value = "index", name = "帆软首页地址", description = "帆软首页地址", status = Status.SHOW) |
||||||
|
private Conf<String> index = Holders.simple("http/localhost:8075/webroot/decision"); |
||||||
|
|
||||||
|
public String getAppId() { |
||||||
|
return appId.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setAppId(String url) { |
||||||
|
this.appId.set(url); |
||||||
|
} |
||||||
|
|
||||||
|
public String getAgentId() { |
||||||
|
return agentId.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setAgentId(String url) { |
||||||
|
this.agentId.set(url); |
||||||
|
} |
||||||
|
|
||||||
|
public String getSecret() { |
||||||
|
return secret.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setSecret(String url) { |
||||||
|
this.secret.set(url); |
||||||
|
} |
||||||
|
|
||||||
|
public String getIndex() { |
||||||
|
return index.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setIndex(String url) { |
||||||
|
this.index.set(url); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object clone() throws CloneNotSupportedException { |
||||||
|
PluginSimpleConfig cloned = (PluginSimpleConfig) super.clone(); |
||||||
|
// cloned.text = (Conf<String>) text.clone();
|
||||||
|
// cloned.count = (Conf<Integer>) count.clone();
|
||||||
|
// cloned.price = (Conf<Double>) price.clone();
|
||||||
|
// cloned.time = (Conf<Long>) time.clone();
|
||||||
|
// cloned.student = (Conf<Boolean>) student.clone();
|
||||||
|
return cloned; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.utils.WebServiceUtils; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.locale.InterProviderFactory; |
||||||
|
import com.fr.plugin.login.config.simple.account.PluginSimpleConfig; |
||||||
|
import com.fr.plugin.login.utils.FRUtils; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.plugin.weixin.server.bean.WeiXinAgent; |
||||||
|
import com.fr.plugin.weixin.server.config.WeiXinConfig; |
||||||
|
import com.fr.plugin.weixin.server.constant.WeiXinConstants; |
||||||
|
import com.fr.plugin.weixin.server.log.WeiXinLogErrorCode; |
||||||
|
import com.fr.plugin.weixin.server.log.WeiXinLoggerFactory; |
||||||
|
import com.fr.plugin.weixin.server.util.*; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
import org.slf4j.MDC; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class AdminLogin extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
public AdminLogin() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/login"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
//登录页面登陆的用户名
|
||||||
|
String username = req.getParameter("username"); |
||||||
|
|
||||||
|
PluginSimpleConfig psc = PluginSimpleConfig.getInstance(); |
||||||
|
String index = psc.getIndex(); |
||||||
|
FRUtils.login(req,res,username,index); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,13 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.HttpHandler; |
||||||
|
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||||
|
|
||||||
|
public class ExtendAttrHandlerProvider extends AbstractHttpHandlerProvider { |
||||||
|
@Override |
||||||
|
public HttpHandler[] registerHandlers() { |
||||||
|
return new HttpHandler[]{ |
||||||
|
new ToQrcode(),new WxAuth(),new AdminLogin(),new GetIp(),new GetConfig() |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.login.config.simple.account.PluginSimpleConfig; |
||||||
|
import com.fr.plugin.login.utils.ResponseUtils; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class GetConfig extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
public GetConfig() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/getConfig"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
String servletPath = req.getServletPath(); |
||||||
|
String contextPath = req.getContextPath(); |
||||||
|
String path =contextPath+servletPath; |
||||||
|
|
||||||
|
PluginSimpleConfig psc = PluginSimpleConfig.getInstance(); |
||||||
|
String index = psc.getIndex(); |
||||||
|
|
||||||
|
JSONObject json = new JSONObject(); |
||||||
|
json.put("path",path); |
||||||
|
json.put("index",index); |
||||||
|
|
||||||
|
ResponseUtils.response(res,json); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.plugin.login.interception.filter.IpInterceptionFilter; |
||||||
|
import com.fr.plugin.login.utils.ResponseUtils; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class GetIp extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
public GetIp() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/getIp"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
String ip = IpInterceptionFilter.getIp(req); |
||||||
|
String username = req.getParameter("username"); |
||||||
|
|
||||||
|
int type = 1; |
||||||
|
|
||||||
|
boolean inWhite = IpInterceptionFilter.checkUserInAllowList(username); |
||||||
|
boolean canLogin = IpInterceptionFilter.checkUserCanLoginOnIp(username,ip); |
||||||
|
|
||||||
|
if(inWhite && !canLogin){ |
||||||
|
type = 0; |
||||||
|
} |
||||||
|
|
||||||
|
ResponseUtils.successResponse(res,String.valueOf(type)); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class ITHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
public ITHandler() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/operateUser"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res){ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,73 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.base.TemplateUtils; |
||||||
|
import com.fr.decision.config.AppearanceConfig; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.general.http.HttpToolbox; |
||||||
|
import com.fr.plugin.login.config.simple.account.PluginSimpleConfig; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.controller.decision.api.auth.LoginResource; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class ToQrcode extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
public ToQrcode() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/toQrcode"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
String origin = req.getParameter("origin"); |
||||||
|
String url = AppearanceConfig.getInstance().getLoginUrl(); |
||||||
|
String username = req.getParameter("username"); |
||||||
|
PluginSimpleConfig pluginSimpleConfig = PluginSimpleConfig.getInstance(); |
||||||
|
String appId = pluginSimpleConfig.getAppId(); |
||||||
|
String agentId = pluginSimpleConfig.getAgentId(); |
||||||
|
String index = pluginSimpleConfig.getIndex(); |
||||||
|
String servletPath = req.getServletPath(); |
||||||
|
String contextPath = req.getContextPath(); |
||||||
|
String path2 =contextPath+servletPath; |
||||||
|
|
||||||
|
if(origin != null ){ |
||||||
|
url = HttpToolbox.appendQuery(url,"origin",origin); |
||||||
|
} |
||||||
|
|
||||||
|
Map<String, String> parameterMap = new HashMap<String, String>(); |
||||||
|
String path = "/com/fr/plugin/login/html/qrcode.html"; |
||||||
|
parameterMap.put("remoteServletURL", WebUtils.getOriginalURL(req)); |
||||||
|
parameterMap.put("username", username); |
||||||
|
parameterMap.put("appId", appId); |
||||||
|
parameterMap.put("agentId", agentId); |
||||||
|
parameterMap.put("index", index); |
||||||
|
parameterMap.put("path", path2); |
||||||
|
|
||||||
|
String macPage = TemplateUtils.renderTemplate(path, parameterMap); |
||||||
|
WebUtils.printAsString(res, macPage); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,18 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAlias; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||||
|
|
||||||
|
public class URLAliasProvide extends AbstractURLAliasProvider { |
||||||
|
@Override |
||||||
|
public URLAlias[] registerAlias() { |
||||||
|
return new URLAlias[]{ |
||||||
|
URLAliasFactory.createPluginAlias("/toQrcode","/toQrcode",true), |
||||||
|
URLAliasFactory.createPluginAlias("/wxAuth","/wxAuth",true), |
||||||
|
URLAliasFactory.createPluginAlias("/login","/login",true), |
||||||
|
URLAliasFactory.createPluginAlias("/getIp","/getIp",true), |
||||||
|
URLAliasFactory.createPluginAlias("/getConfig","/getConfig",true) |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,91 @@ |
|||||||
|
package com.fr.plugin.login.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.login.config.simple.account.PluginSimpleConfig; |
||||||
|
import com.fr.plugin.login.utils.FRUtils; |
||||||
|
import com.fr.plugin.login.utils.ResponseUtils; |
||||||
|
import com.fr.plugin.login.utils.Utils; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.plugin.weixin.server.log.WeiXinLogErrorCode; |
||||||
|
import com.fr.plugin.weixin.server.log.WeiXinLoggerFactory; |
||||||
|
import com.fr.plugin.weixin.server.util.WeiXinRequest; |
||||||
|
import com.fr.plugin.weixin.server.util.WeiXinUserUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class WxAuth extends BaseHttpHandler { |
||||||
|
|
||||||
|
|
||||||
|
public WxAuth() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/wxAuth"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
PluginSimpleConfig psc = PluginSimpleConfig.getInstance(); |
||||||
|
//登录页面登陆的用户名
|
||||||
|
String username = req.getParameter("username"); |
||||||
|
String code = req.getParameter("code"); |
||||||
|
String secret = psc.getSecret(); |
||||||
|
String realUsername =weixinAuth(code,secret); |
||||||
|
|
||||||
|
if(Utils.isNullStr(realUsername)){ |
||||||
|
ResponseUtils.failedResponse(res,"微信鉴权失败,请联系管理员!"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if(!username.equals(realUsername)){ |
||||||
|
ResponseUtils.failedResponse(res,"微信关联账户与登录账户不一致,请重新登录!"); |
||||||
|
return; |
||||||
|
} |
||||||
|
String index = psc.getIndex(); |
||||||
|
|
||||||
|
FRUtils.login(req,res,username,index); |
||||||
|
} |
||||||
|
|
||||||
|
private static String weixinAuth(String code,String secret) throws Exception{ |
||||||
|
JSONObject userInfo = WeiXinRequest.getUserInfoByCode(code, secret); |
||||||
|
FRUtils.FRLogInfo("userInfo:"+userInfo.toString()); |
||||||
|
String decUserName = ""; |
||||||
|
|
||||||
|
if (userInfo != null && userInfo.has("UserId")) { |
||||||
|
String userId = userInfo.optString("UserId"); |
||||||
|
JSONObject detailUserInfo = WeiXinRequest.getDetailUserInfoByUserId(secret, userId); |
||||||
|
if (WeiXinRequest.isOk(detailUserInfo)) { |
||||||
|
FRUtils.FRLogInfo(String.format("userid为%s的用户详细信息为:", userId) + detailUserInfo.toString()); |
||||||
|
if (WeiXinUserUtils.isWeiXinUserEnable(detailUserInfo)) { |
||||||
|
WeiXinLoggerFactory.getLogger().debug("开始匹配平台用户。。。"); |
||||||
|
decUserName = WeiXinUserUtils.weiXinUserToDecUser(detailUserInfo); |
||||||
|
FRUtils.FRLogInfo("decUserName"); |
||||||
|
} else { |
||||||
|
FRUtils.FRLogInfo("微信用户被禁用,请于微信管理后台设置!" + WeiXinLogErrorCode.WEIXIN_USER_DISABLE); |
||||||
|
} |
||||||
|
} else { |
||||||
|
FRUtils.FRLogInfo(String.format("获取userId为%s的用户详细信息失败!", userId) + WeiXinLogErrorCode.GET_USER_DETAIL_FAIL); |
||||||
|
} |
||||||
|
} else { |
||||||
|
FRUtils.FRLogInfo("code换取userId失败,请检查网络设置!" + WeiXinLogErrorCode.GET_USERID_FAIL); |
||||||
|
} |
||||||
|
|
||||||
|
return decUserName; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.plugin.login.interception; |
||||||
|
|
||||||
|
import com.fr.decision.plugin.db.AbstractDecisionDBAccessProvider; |
||||||
|
import com.fr.plugin.login.interception.dao.IpInterceptionDao; |
||||||
|
import com.fr.plugin.login.interception.dao.UserReleaseDao; |
||||||
|
import com.fr.plugin.login.interception.entity.IpInterceptionEntity; |
||||||
|
import com.fr.plugin.login.interception.entity.UserReleaseEntity; |
||||||
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOProvider; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class IpInterceptionDBAccessProvider extends AbstractDecisionDBAccessProvider { |
||||||
|
@Override |
||||||
|
@ExecuteFunctionRecord |
||||||
|
public DAOProvider[] registerDAO() { |
||||||
|
return new DAOProvider[]{ |
||||||
|
new DAOProvider() { |
||||||
|
@Override |
||||||
|
public Class getEntityClass() { |
||||||
|
return IpInterceptionEntity.class; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return IpInterceptionDao.class; |
||||||
|
} |
||||||
|
}, |
||||||
|
new DAOProvider() { |
||||||
|
@Override |
||||||
|
public Class getEntityClass() { |
||||||
|
return UserReleaseEntity.class; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return UserReleaseDao.class; |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private static DBAccessor dbAccessor = null; |
||||||
|
|
||||||
|
public static DBAccessor getDbAccessor(){ |
||||||
|
return dbAccessor; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onDBAvailable(DBAccessor dbAccessor) { |
||||||
|
IpInterceptionDBAccessProvider.dbAccessor = dbAccessor; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package com.fr.plugin.login.interception; |
||||||
|
|
||||||
|
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||||
|
|
||||||
|
public class IpInterceptionLocalFinder extends AbstractLocaleFinder { |
||||||
|
@Override |
||||||
|
public String find() { |
||||||
|
return "com/fr/plugin/demo"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.login.interception.config; |
||||||
|
|
||||||
|
import com.fr.config.ConfigContext; |
||||||
|
import com.fr.config.DefaultConfiguration; |
||||||
|
|
||||||
|
public class IpInterceptionConfig extends DefaultConfiguration { |
||||||
|
private static IpInterceptionConfig config = null; |
||||||
|
|
||||||
|
public static IpInterceptionConfig getInstance(){ |
||||||
|
if (config == null){ |
||||||
|
config = ConfigContext.getConfigInstance(IpInterceptionConfig.class); |
||||||
|
} |
||||||
|
return config; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.plugin.login.interception.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.login.interception.entity.IpInterceptionEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class IpInterceptionDao extends BaseDAO<IpInterceptionEntity> { |
||||||
|
public IpInterceptionDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Class<IpInterceptionEntity> getEntityClass() { |
||||||
|
return IpInterceptionEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.plugin.login.interception.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.login.interception.entity.UserReleaseEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class UserReleaseDao extends BaseDAO<UserReleaseEntity> { |
||||||
|
public UserReleaseDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Class<UserReleaseEntity> getEntityClass() { |
||||||
|
return UserReleaseEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
package com.fr.plugin.login.interception.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; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_2a4457_ip_interception" |
||||||
|
) |
||||||
|
public class IpInterceptionEntity extends BaseEntity { |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "createTime" |
||||||
|
) |
||||||
|
private Date createTime; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "endIp" |
||||||
|
) |
||||||
|
private String endIp; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "startIp" |
||||||
|
) |
||||||
|
private String startIp; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "userName" |
||||||
|
) |
||||||
|
private String userName; |
||||||
|
|
||||||
|
public String getUserName() { |
||||||
|
return userName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUserName(String userName) { |
||||||
|
this.userName = userName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getStartIp() { |
||||||
|
return startIp; |
||||||
|
} |
||||||
|
|
||||||
|
public void setStartIp(String startIp) { |
||||||
|
this.startIp = startIp; |
||||||
|
} |
||||||
|
|
||||||
|
public String getEndIp() { |
||||||
|
return endIp; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEndIp(String endIp) { |
||||||
|
this.endIp = endIp; |
||||||
|
} |
||||||
|
|
||||||
|
public Date getCreateTime() { |
||||||
|
return createTime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCreateTime(Date createTime) { |
||||||
|
this.createTime = createTime; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.login.interception.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; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_2a4457_user_release" |
||||||
|
) |
||||||
|
public class UserReleaseEntity extends BaseEntity { |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "createTime" |
||||||
|
) |
||||||
|
private Date createTime; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "userName" |
||||||
|
) |
||||||
|
private String userName; |
||||||
|
|
||||||
|
public String getUserName() { |
||||||
|
return userName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUserName(String userName) { |
||||||
|
this.userName = userName; |
||||||
|
} |
||||||
|
|
||||||
|
public Date getCreateTime() { |
||||||
|
return createTime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCreateTime(Date createTime) { |
||||||
|
this.createTime = createTime; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,188 @@ |
|||||||
|
package com.fr.plugin.login.interception.filter; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.login.interception.IpInterceptionDBAccessProvider; |
||||||
|
import com.fr.plugin.login.interception.dao.IpInterceptionDao; |
||||||
|
import com.fr.plugin.login.interception.dao.UserReleaseDao; |
||||||
|
import com.fr.plugin.login.interception.entity.IpInterceptionEntity; |
||||||
|
import com.fr.plugin.login.interception.entity.UserReleaseEntity; |
||||||
|
import com.fr.plugin.login.interception.function.CheckIpValid; |
||||||
|
import com.fr.plugin.login.interception.function.MobileAgents; |
||||||
|
import com.fr.plugin.login.utils.FRUtils; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.ServletException; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.IOException; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class IpInterceptionFilter extends AbstractGlobalRequestFilterProvider { |
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "IpInterception"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
return new String[]{ |
||||||
|
"/decision/*" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain){ |
||||||
|
try { |
||||||
|
String allUrl = FRUtils.getAllUrl(req); |
||||||
|
if (isLogin(req)) { |
||||||
|
String currentUserName = LoginService.getInstance().getCurrentUserNameFromRequestCookie(req); |
||||||
|
String currentUserId = UserService.getInstance().getCurrentUserId(currentUserName); |
||||||
|
|
||||||
|
String userAgent = req.getHeader("User-Agent"); |
||||||
|
// System.out.println(userAgent+"*******");
|
||||||
|
FineLoggerFactory.getLogger().info("Login device : " + userAgent); |
||||||
|
|
||||||
|
//是不是移动端(移动端全部放xing)
|
||||||
|
if (!MobileAgents.checkAgentIsMobile(req)) { |
||||||
|
//是不是admin
|
||||||
|
if (!UserService.getInstance().isAdmin(currentUserId)) { |
||||||
|
String ip = getIp(req); |
||||||
|
FineLoggerFactory.getLogger().info("Is not admin at :" + ip); |
||||||
|
FineLoggerFactory.getLogger().info("inAllowList :" + !checkUserInAllowList(currentUserName)); |
||||||
|
FineLoggerFactory.getLogger().info("checkUserCanLoginOnIp :" + !checkUserCanLoginOnIp(currentUserName, ip)); |
||||||
|
|
||||||
|
//是不是白名单
|
||||||
|
if (!checkUserInAllowList(currentUserName)) { |
||||||
|
//是否可以在指定IP登陆
|
||||||
|
if (!checkUserCanLoginOnIp(currentUserName, ip)) { |
||||||
|
// String warning = InterProviderFactory.getProvider().getLocText("Plugin-Dec_Filter_Warning_1")
|
||||||
|
// + "\t" + ip + "\t"
|
||||||
|
// + InterProviderFactory.getProvider().getLocText("Plugin-Dec_Filter_Warning_2");
|
||||||
|
// System.out.println(warning);
|
||||||
|
// req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, "");
|
||||||
|
|
||||||
|
// WebUtils.printAsString(res, "You are not allow to login at " + ip + "5");
|
||||||
|
// Thread.sleep(1*1000);
|
||||||
|
// WebUtils.printAsString(res, "You are not allow to login at " + ip + "4");
|
||||||
|
// Thread.sleep(1*1000);
|
||||||
|
// WebUtils.printAsString(res, "You are not allow to login at " + ip + "3");
|
||||||
|
// Thread.sleep(1*1000);
|
||||||
|
// WebUtils.printAsString(res, "You are not allow to login at " + ip + "2");
|
||||||
|
// Thread.sleep(1*1000);
|
||||||
|
// WebUtils.printAsString(res, "You are not allow to login at " + ip + "1");
|
||||||
|
// Thread.sleep(1*1000);
|
||||||
|
// LoginService.getInstance().logout(req, res);
|
||||||
|
// new LogInOutResultInfo(req, res, currentUserName, false);
|
||||||
|
// WebUtils.printAsString(res, "You are not allow to login at " + ip);
|
||||||
|
// System.out.println(""+ isLogin(req));
|
||||||
|
// req.getRequestedSessionId();
|
||||||
|
// HttpSession httpSession = req.getSession();
|
||||||
|
// httpSession.invalidate();
|
||||||
|
// req.getAttributeNames();
|
||||||
|
// req.removeAttribute("");
|
||||||
|
// new LogInOutResultInfo(req, res, currentUserName, false);
|
||||||
|
// filterChain.doFilter(req, res);
|
||||||
|
// Logo;
|
||||||
|
LoginService.getInstance().logout(req, res); |
||||||
|
// LoginService.getInstance().cleanLoginDetailInfo(5000);
|
||||||
|
// FineLoggerFactory.getLogger().info("\n-------------------" + isLogin(req));
|
||||||
|
// return ;
|
||||||
|
} |
||||||
|
} |
||||||
|
}else { |
||||||
|
FineLoggerFactory.getLogger().info("Is admin"); |
||||||
|
} |
||||||
|
}else { |
||||||
|
// FineLoggerFactory.getLogger().info("Login on Mobile");
|
||||||
|
} |
||||||
|
} |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
// LoginService.getInstance().logout(req, res);
|
||||||
|
}catch (IOException | ServletException ignored){ |
||||||
|
|
||||||
|
}catch (Exception e){ |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean checkUserCanLoginOnIp(String userName, String ip) throws Exception { |
||||||
|
DBAccessor dbAccessor = IpInterceptionDBAccessProvider.getDbAccessor(); |
||||||
|
List<IpInterceptionEntity> entities = null; |
||||||
|
entities = dbAccessor.runQueryAction(daoContext -> |
||||||
|
daoContext.getDAO(IpInterceptionDao.class).find( |
||||||
|
QueryFactory.create().addRestriction(RestrictionFactory.eq("userName", userName)) |
||||||
|
) |
||||||
|
); |
||||||
|
/** |
||||||
|
* TODO: 1.登出 2.若填报页面内用户wei*,则适用于所有的用户 |
||||||
|
*/ |
||||||
|
List<IpInterceptionEntity> allUser = dbAccessor.runQueryAction(daoContext -> |
||||||
|
daoContext.getDAO(IpInterceptionDao.class).find( |
||||||
|
QueryFactory.create().addRestriction(RestrictionFactory.eq("userName", "*")) |
||||||
|
) |
||||||
|
); |
||||||
|
// entities.add(allUser.get());
|
||||||
|
entities.addAll(allUser); |
||||||
|
boolean status = false; |
||||||
|
if (!entities.isEmpty()){ |
||||||
|
String list = ""; |
||||||
|
|
||||||
|
//只要循环里出现了1个true,就跳出循环
|
||||||
|
for(int i = 0; i < entities.size() && status == false; i++){ |
||||||
|
IpInterceptionEntity ipInterceptionEntity = entities.get(i); |
||||||
|
// if (ip.equals(ipInterceptionEntity.getStartIp())){
|
||||||
|
// status = true;
|
||||||
|
// }
|
||||||
|
// System.out.println("----------------"+ipInterceptionEntity.getEndIp());
|
||||||
|
if (ipInterceptionEntity.getEndIp() == null || ipInterceptionEntity.getEndIp().isEmpty()){ |
||||||
|
status = CheckIpValid.ipIsValid(ipInterceptionEntity.getStartIp(), ipInterceptionEntity.getStartIp(), ip); |
||||||
|
list = list.concat(ipInterceptionEntity.getStartIp() + "\n"); |
||||||
|
}else{ |
||||||
|
status = CheckIpValid.ipIsValid(ipInterceptionEntity.getStartIp(), ipInterceptionEntity.getEndIp(), ip); |
||||||
|
list = list.concat(ipInterceptionEntity.getStartIp() + " - " + ipInterceptionEntity.getEndIp() + "\n"); |
||||||
|
} |
||||||
|
// if (status){
|
||||||
|
// i = entities.size() + 1; //只要查出来一个true,就跳出循环
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("\nAllow ip : " + list); |
||||||
|
}else { |
||||||
|
FineLoggerFactory.getLogger().info("Not found user in ip list!"); |
||||||
|
} |
||||||
|
// return !entities.isEmpty();
|
||||||
|
return status; |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean checkUserInAllowList(String userName) throws Exception{ |
||||||
|
DBAccessor dbAccessor = IpInterceptionDBAccessProvider.getDbAccessor(); |
||||||
|
List<UserReleaseEntity> list = null; |
||||||
|
list = dbAccessor.runQueryAction(daoContext -> |
||||||
|
daoContext.getDAO(UserReleaseDao.class).find( |
||||||
|
QueryFactory.create().addRestriction(RestrictionFactory.eq("userName", userName)) |
||||||
|
) |
||||||
|
); |
||||||
|
FineLoggerFactory.getLogger().info("User in allow list : " + !list.isEmpty()); |
||||||
|
return !list.isEmpty(); |
||||||
|
} |
||||||
|
|
||||||
|
public static String getIp(HttpServletRequest req){ |
||||||
|
|
||||||
|
/** |
||||||
|
* req.getRemoteAddr() : 默认的获取IP的方法,但是如果是多级代理则无法判断是否为真实IP |
||||||
|
* WebServiceUtils.getIpInfoFromRequest(req) : 帆软提供的获取IP的方法,不知道能不能在多级代理中获取真实IP |
||||||
|
*/ |
||||||
|
// return req.getRemoteAddr();
|
||||||
|
// return WebServiceUtils.getIpInfoFromRequest(req);
|
||||||
|
return CheckIpValid.getIp(req); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isLogin(HttpServletRequest req) { |
||||||
|
return LoginService.getInstance().isLogged(req); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,74 @@ |
|||||||
|
package com.fr.plugin.login.interception.function; |
||||||
|
|
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
|
||||||
|
public class CheckIpValid { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取真实的IP |
||||||
|
* @param request |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getIp(HttpServletRequest request) { |
||||||
|
String ip = request.getHeader("X-Forwarded-For"); |
||||||
|
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { |
||||||
|
//多次反向代理后会有多个ip值,第一个ip才是真实ip
|
||||||
|
int index = ip.indexOf(","); |
||||||
|
if (index != -1) { |
||||||
|
return ip.substring(0,index); |
||||||
|
} else { |
||||||
|
return ip; |
||||||
|
} |
||||||
|
} |
||||||
|
ip = request.getHeader("X-Real-IP"); |
||||||
|
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { |
||||||
|
return ip; |
||||||
|
} |
||||||
|
return request.getRemoteAddr(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断IP是否在指定范围内 |
||||||
|
* @param ipStart |
||||||
|
* @param ipEnd |
||||||
|
* @param ip |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static boolean ipIsValid(String ipStart,String ipEnd, String ip) { |
||||||
|
if (StringUtils.isEmpty(ipStart)) { |
||||||
|
throw new NullPointerException("起始IP不能为空!"); |
||||||
|
} |
||||||
|
if (StringUtils.isEmpty(ipEnd)) { |
||||||
|
throw new NullPointerException("结束IP不能为空!"); |
||||||
|
} |
||||||
|
if (StringUtils.isEmpty(ip)) { |
||||||
|
throw new NullPointerException("IP不能为空!"); |
||||||
|
} |
||||||
|
ipStart = ipStart.trim(); |
||||||
|
ipEnd = ipEnd.trim(); |
||||||
|
ip = ip.trim(); |
||||||
|
final String REGX_IP = "((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"; |
||||||
|
final String REGX_IPB = REGX_IP + "\\-" + REGX_IP; |
||||||
|
if (!ipStart.matches(REGX_IP) || !ip.matches(REGX_IP) || !ipEnd.matches(REGX_IP)) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
String[] sips = ipStart.split("\\."); |
||||||
|
String[] sipe = ipEnd.split("\\."); |
||||||
|
String[] sipt = ip.split("\\."); |
||||||
|
long ips = 0L, ipe = 0L, ipt = 0L; |
||||||
|
for (int i = 0; i < 4; ++i) { |
||||||
|
ips = ips << 8 | Integer.parseInt(sips[i]); |
||||||
|
ipe = ipe << 8 | Integer.parseInt(sipe[i]); |
||||||
|
ipt = ipt << 8 | Integer.parseInt(sipt[i]); |
||||||
|
} |
||||||
|
if (ips > ipe) { |
||||||
|
long t = ips; |
||||||
|
ips = ipe; |
||||||
|
ipe = t; |
||||||
|
} |
||||||
|
return ips <= ipt && ipt <= ipe; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.fr.plugin.login.interception.function; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
|
||||||
|
public class MobileAgents { |
||||||
|
//定义移动端的请求
|
||||||
|
private final static String[] AGENTS_MOBILE = {"Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser"}; |
||||||
|
|
||||||
|
public static boolean checkAgentIsMobile(HttpServletRequest request){ |
||||||
|
|
||||||
|
String ua = request.getHeader("User-Agent"); |
||||||
|
boolean flag = false; |
||||||
|
if(!ua.contains("Windows NT") || (ua.contains("Windows NT") && ua.contains("compatible; MSIE 9.0;"))){ |
||||||
|
//排除苹果桌面系统
|
||||||
|
if (!ua.contains("Windows NT") && !ua.contains("Macintosh")){ |
||||||
|
for (String item : AGENTS_MOBILE){ |
||||||
|
if (ua.contains(item)){ |
||||||
|
FineLoggerFactory.getLogger().info("Device : " + item); |
||||||
|
flag = true; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return flag; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,158 @@ |
|||||||
|
package com.fr.plugin.login.utils; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.webservice.login.LogInOutResultInfo; |
||||||
|
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.login.event.LogInOutEvent; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.event.EventDispatcher; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import javax.servlet.http.HttpSession; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class FRUtils { |
||||||
|
/** |
||||||
|
* 判断用户是否存在 |
||||||
|
* @param userName |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static boolean isUserExist(String userName){ |
||||||
|
if (StringUtils.isEmpty(userName)) { |
||||||
|
return false; |
||||||
|
} else { |
||||||
|
try { |
||||||
|
List var1 = AuthorityContext.getInstance().getUserController().find(QueryFactory.create().addRestriction(RestrictionFactory.eq("userName", userName))); |
||||||
|
return var1 != null && !var1.isEmpty(); |
||||||
|
} catch (Exception var2) { |
||||||
|
FineLoggerFactory.getLogger().error(var2.getMessage()); |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断是否登录FR |
||||||
|
* @param req |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static boolean isLogin(HttpServletRequest req){ |
||||||
|
return LoginService.getInstance().isLogged(req); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 帆软登录 |
||||||
|
* @param httpServletRequest |
||||||
|
* @param httpServletResponse |
||||||
|
* @param userName |
||||||
|
* @param url |
||||||
|
*/ |
||||||
|
public static void login(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,String userName,String url){ |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:用户名:"+userName); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:跳转链接:"+url); |
||||||
|
|
||||||
|
|
||||||
|
//判断用户名是否为空
|
||||||
|
if(!Utils.isNullStr(userName)){ |
||||||
|
if(isUserExist(userName)){ |
||||||
|
String FRToken = ""; |
||||||
|
|
||||||
|
try { |
||||||
|
HttpSession session = httpServletRequest.getSession(true); |
||||||
|
|
||||||
|
FRToken = LoginService.getInstance().login(httpServletRequest, httpServletResponse, userName); |
||||||
|
|
||||||
|
httpServletRequest.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME,FRToken); |
||||||
|
|
||||||
|
session.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, FRToken); |
||||||
|
EventDispatcher.fire(LogInOutEvent.LOGIN,new LogInOutResultInfo(httpServletRequest,httpServletResponse,userName,true)); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:登陆成功!"); |
||||||
|
|
||||||
|
if(!Utils.isNullStr(url)){ |
||||||
|
httpServletResponse.sendRedirect(url); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
ResponseUtils.failedResponse(httpServletResponse,"登录异常,请联系管理员!"); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:登录异常,请联系管理员!"); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOGException:"+e.getMessage()); |
||||||
|
} |
||||||
|
}else{ |
||||||
|
ResponseUtils.failedResponse(httpServletResponse,"用户在报表系统中不存在!"); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:用户在报表系统中不存在!"); |
||||||
|
} |
||||||
|
}else{ |
||||||
|
ResponseUtils.failedResponse(httpServletResponse,"用户名不能为空!"); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:用户名不能为空!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @param httpServletRequest |
||||||
|
* @param httpServletResponse |
||||||
|
*/ |
||||||
|
public static void logout(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) |
||||||
|
{ |
||||||
|
if(!isLogin(httpServletRequest)){ |
||||||
|
return ; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
LoginService.getInstance().logout(httpServletRequest,httpServletResponse); |
||||||
|
} catch (Exception e) { |
||||||
|
ResponseUtils.failedResponse(httpServletResponse,"登出异常,请联系管理员!"); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:登出异常,请联系管理员!"); |
||||||
|
FineLoggerFactory.getLogger().info("FRLOGException:"+e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 打印FR日志 |
||||||
|
* @param message |
||||||
|
*/ |
||||||
|
public static void FRLogInfo(String message){ |
||||||
|
FineLoggerFactory.getLogger().info("FRLOG:"+message); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据用户名获取用户信息 |
||||||
|
* @param userName |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static User getFRUserByUserName(String userName){ |
||||||
|
try { |
||||||
|
return UserService.getInstance().getUserByUserName(userName); |
||||||
|
} catch (Exception e) { |
||||||
|
FRLogInfo("获取用户信息异常:"+e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 解密FR密码 |
||||||
|
* @param password |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
// public static String decryptFRPsd(String password){
|
||||||
|
// FRLogInfo("解密密码:"+password);
|
||||||
|
// return TransmissionTool.decrypt(password);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取带参数的访问链接 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getAllUrl(HttpServletRequest httpServletRequest){ |
||||||
|
return WebUtils.getOriginalURL(httpServletRequest); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,96 @@ |
|||||||
|
package com.fr.plugin.login.utils; |
||||||
|
|
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.PrintWriter; |
||||||
|
|
||||||
|
public class ResponseUtils { |
||||||
|
private static final int SUCCESS = 200; |
||||||
|
private static final int FAILED = -1; |
||||||
|
|
||||||
|
public static void successResponse(HttpServletResponse res, String body) { |
||||||
|
response(res, body, SUCCESS); |
||||||
|
} |
||||||
|
|
||||||
|
public static void failedResponse(HttpServletResponse res, String body) { |
||||||
|
response(res, body, FAILED); |
||||||
|
} |
||||||
|
|
||||||
|
private static void response(HttpServletResponse res, String body, int code) { |
||||||
|
|
||||||
|
FRUtils.FRLogInfo("body:"+body+";code:"+code); |
||||||
|
JSONObject object = new JSONObject(); |
||||||
|
PrintWriter pw; |
||||||
|
try { |
||||||
|
object.put("code", code); |
||||||
|
object.put("data", body); |
||||||
|
pw = WebUtils.createPrintWriter(res); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().info(e.getMessage()); |
||||||
|
return; |
||||||
|
} |
||||||
|
res.setContentType("application/json;charset=utf-8"); |
||||||
|
String result = object.toString(); |
||||||
|
pw.println(result); |
||||||
|
pw.flush(); |
||||||
|
pw.close(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void response(HttpServletResponse res,JSONObject json){ |
||||||
|
PrintWriter pw; |
||||||
|
try { |
||||||
|
pw = WebUtils.createPrintWriter(res); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().info(e.getMessage()); |
||||||
|
return; |
||||||
|
} |
||||||
|
res.setContentType("application/json;charset=utf-8"); |
||||||
|
String result = json.toString(); |
||||||
|
pw.println(result); |
||||||
|
pw.flush(); |
||||||
|
pw.close(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void responseXml(HttpServletResponse res,String xml){ |
||||||
|
PrintWriter pw; |
||||||
|
try { |
||||||
|
pw = WebUtils.createPrintWriter(res); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().info(e.getMessage()); |
||||||
|
return; |
||||||
|
} |
||||||
|
res.setContentType("text/xml;charset=utf-8"); |
||||||
|
pw.println(xml); |
||||||
|
pw.flush(); |
||||||
|
pw.close(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void setCSRFHeader(HttpServletResponse httpServletResponse){ |
||||||
|
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*"); |
||||||
|
httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH"); |
||||||
|
httpServletResponse.setHeader("Access-Control-Max-Age", "36000"); |
||||||
|
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization"); |
||||||
|
} |
||||||
|
|
||||||
|
public static void responseJsonp(HttpServletRequest req, HttpServletResponse res, JSONObject json){ |
||||||
|
PrintWriter pw; |
||||||
|
try { |
||||||
|
pw = WebUtils.createPrintWriter(res); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().info(e.getMessage()); |
||||||
|
return; |
||||||
|
} |
||||||
|
res.setContentType("text/javascript;charset=utf-8;charset=utf-8"); |
||||||
|
String result = json.toString(); |
||||||
|
|
||||||
|
String jsonp=req.getParameter("callback"); |
||||||
|
|
||||||
|
pw.println(jsonp+"("+result+")"); |
||||||
|
pw.flush(); |
||||||
|
pw.close(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,94 @@ |
|||||||
|
package com.fr.plugin.login.utils; |
||||||
|
|
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.stable.CodeUtils; |
||||||
|
import com.fr.third.org.apache.commons.codec.digest.DigestUtils; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.util.UUID; |
||||||
|
|
||||||
|
public class Utils { |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断字符串是否为空 |
||||||
|
* @param str |
||||||
|
* @return true 空字符串 false 非空字符串 |
||||||
|
*/ |
||||||
|
public static boolean isNullStr(String str){ |
||||||
|
return !(str != null && !str.isEmpty() && !"null".equals(str)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断字符串是否非空 |
||||||
|
* @param str |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static boolean isNotNullStr(String str){ |
||||||
|
return !isNullStr(str); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* MD5加密 |
||||||
|
* @param str |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getMd5Str(String str) |
||||||
|
{ |
||||||
|
return DigestUtils.md5Hex(str); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 获取完整的访问路径 |
||||||
|
*/ |
||||||
|
public static String getAllUrl(HttpServletRequest req, String queryStr){ |
||||||
|
String url = req.getRequestURL().toString(); |
||||||
|
|
||||||
|
if(isNullStr(queryStr)){ |
||||||
|
return url; |
||||||
|
} |
||||||
|
|
||||||
|
return url+"?"+queryStr; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 帆软shaEncode加密 |
||||||
|
*/ |
||||||
|
|
||||||
|
public static String shaEncode(String str){ |
||||||
|
return CodeUtils.sha256Encode(str); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取uuid |
||||||
|
*/ |
||||||
|
public static String uuid(){ |
||||||
|
return UUID.randomUUID().toString(); |
||||||
|
} |
||||||
|
|
||||||
|
public static String replaceNullStr(String str,String replace){ |
||||||
|
if(isNullStr(str)){ |
||||||
|
return replace; |
||||||
|
} |
||||||
|
|
||||||
|
return str; |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONObject getRequestBody(HttpServletRequest req){ |
||||||
|
StringBuffer sb = new StringBuffer(); |
||||||
|
String line = null; |
||||||
|
try { |
||||||
|
BufferedReader reader = req.getReader(); |
||||||
|
while ((line = reader.readLine()) != null) |
||||||
|
sb.append(line); |
||||||
|
} catch (Exception e) { |
||||||
|
FRUtils.FRLogInfo("getRequestBody:exception:"+e.getMessage()); |
||||||
|
} |
||||||
|
//将空格和换行符替换掉避免使用反序列化工具解析对象时失败
|
||||||
|
String jsonString = sb.toString().replaceAll("\\s","").replaceAll("\n",""); |
||||||
|
|
||||||
|
JSONObject json = new JSONObject(jsonString); |
||||||
|
|
||||||
|
return json; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.fr.plugin.login.webresource; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractWebResourceProvider; |
||||||
|
import com.fr.decision.web.LoginComponent; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.web.struct.Atom; |
||||||
|
import com.fr.web.struct.Component; |
||||||
|
import com.fr.web.struct.browser.RequestClient; |
||||||
|
import com.fr.web.struct.category.ScriptPath; |
||||||
|
import com.fr.web.struct.category.StylePath; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by zhouping on 2019/1/16. |
||||||
|
*/ |
||||||
|
@FunctionRecorder |
||||||
|
public class WebResourceProvider extends AbstractWebResourceProvider { |
||||||
|
@Override |
||||||
|
public Atom attach() { |
||||||
|
return LoginComponent.KEY; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Atom client() { |
||||||
|
return new Component() { |
||||||
|
@Override |
||||||
|
public ScriptPath script(RequestClient requestClient) { |
||||||
|
return ScriptPath.build("/com/fr/plugin/login/js/login.js"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public StylePath style(RequestClient requestClient) { |
||||||
|
return StylePath.EMPTY; |
||||||
|
// return StylePath.build("/com/fr/plugin/jdfSSO/css/icon.css");
|
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
<html> |
||||||
|
<head> |
||||||
|
<title>扫描二维码</title> |
||||||
|
</head> |
||||||
|
<script type="text/javascript" src="${path}/file?path=/com/fr/plugin/login/js/jquery-2.1.3.min.js" ></script> |
||||||
|
<script> |
||||||
|
const defaultWechatConfig = { |
||||||
|
// 企业微信配置 |
||||||
|
agentId: '1000003',//企业微信内自行获取 |
||||||
|
appId: "wwbeb7d78360b086c2",//企业微信内自行获取 |
||||||
|
callbackUrl: "http://a396979t49.qicp.vip/webroot/decision/url/wxAuth",//企业微信内自行配置获取 |
||||||
|
state: "1"//企业微信内自行配置获取 |
||||||
|
}; |
||||||
|
|
||||||
|
function loadScript(callback) { |
||||||
|
let s = document.createElement("script"); |
||||||
|
s.setAttribute( |
||||||
|
"src", |
||||||
|
"http://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js" |
||||||
|
); |
||||||
|
document.head.appendChild(s); |
||||||
|
s.onload = function() { |
||||||
|
callback(); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
loadScript(function() { |
||||||
|
var username =$("#username").val(); |
||||||
|
var w = defaultWechatConfig; |
||||||
|
var appId =$("#appId").val(); |
||||||
|
var agentId =$("#agentId").val(); |
||||||
|
var index =$("#index").val(); |
||||||
|
|
||||||
|
window.WwLogin({ |
||||||
|
id: "js-layout-login-login-wechat-qrcode", |
||||||
|
appid: appId, |
||||||
|
agentid: agentId, |
||||||
|
redirect_uri: index+"/url/wxAuth?username="+username, |
||||||
|
state: w.state |
||||||
|
}); |
||||||
|
|
||||||
|
// window.WwLogin({ |
||||||
|
// id: "js-layout-login-login-wechat-qrcode", |
||||||
|
// appid: 'wwbeb7d78360b086c2', |
||||||
|
// agentid: '1000002', |
||||||
|
// redirect_uri: "http://a396979t49.qicp.vip/webroot/decison/url/wxAuth?username="+username+";RkfOBpF5YRkJokGDjZCWFemCbGdSxK_PnNTk3NlAnQI", |
||||||
|
// state: w.state |
||||||
|
// }); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
<body> |
||||||
|
<input id="username" type="hidden" value="${username}" /> |
||||||
|
<input id="appId" type="hidden" value="${appId}" /> |
||||||
|
<input id="agentId" type="hidden" value="${agentId}" /> |
||||||
|
<input id="index" type="hidden" value="${index}" /> |
||||||
|
|
||||||
|
<div id="js-layout-login-login-wechat-qrcode" class="layout_qrcode" /> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,4 @@ |
|||||||
|
Plugin-Test_Function_Abs= |
||||||
|
Plugin-Config_Demo= |
||||||
|
Plugin-Dec_Filter_Warning_1= |
||||||
|
Plugin-Dec_Filter_Warning_2= |
@ -0,0 +1,4 @@ |
|||||||
|
Plugin-Test_Function_Abs=Test ABS |
||||||
|
Plugin-Config_Demo= test 18n |
||||||
|
Plugin-Dec_Filter_Warning_1= Sorry, you can't login at |
||||||
|
Plugin-Dec_Filter_Warning_2=! |
@ -0,0 +1,4 @@ |
|||||||
|
Plugin-Test_Function_Abs=\u6D4B\u8BD5ABS\u51FD\u6570 |
||||||
|
Plugin-Config_Demo=\u56FD\u9645\u5316\u6D4B\u8BD5 |
||||||
|
Plugin-Dec_Filter_Warning_1=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u4E0D\u80FD\u5728 |
||||||
|
Plugin-Dec_Filter_Warning_2=\u767B\u9646! |
@ -0,0 +1,117 @@ |
|||||||
|
!(function(){ |
||||||
|
BI.config("dec.constant.system.tabs", function (items) { |
||||||
|
items.push({ |
||||||
|
value: "ipToken", |
||||||
|
text: BI.i18nText("IP配置"), // 文字
|
||||||
|
cardType: "dec.management.ipConfig" |
||||||
|
}); |
||||||
|
return items; |
||||||
|
}); |
||||||
|
|
||||||
|
BI.config("dec.constant.menu.items", function (items) { |
||||||
|
items.push({ |
||||||
|
value: "baidu", |
||||||
|
text: BI.i18nText("百度一下"), |
||||||
|
cardType:{ |
||||||
|
src:"http://baidu.com" |
||||||
|
}, |
||||||
|
cls: "analysis-menu-font" |
||||||
|
}); |
||||||
|
return items; |
||||||
|
}); |
||||||
|
|
||||||
|
function resolvePath(path, isPublic){ |
||||||
|
if(!path || path[0] !== '/'){ |
||||||
|
path = '/' + path; |
||||||
|
} |
||||||
|
return isPublic === true |
||||||
|
? '/plugin/public/com.fr.plugin.dw.dw.7.project' + path |
||||||
|
: '/plugin/private/com.fr.plugin.dw.dw.7.project' + path; |
||||||
|
} |
||||||
|
|
||||||
|
var ipConfig = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "ipConfig" |
||||||
|
}, |
||||||
|
render: function(){ |
||||||
|
var self = this; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "bi.button", |
||||||
|
text: "添加", |
||||||
|
handler: function() { |
||||||
|
var id = "addUserPane" |
||||||
|
var that = this; |
||||||
|
|
||||||
|
BI.Popovers.create(id, { |
||||||
|
type: "bi.bar_popover", |
||||||
|
// String或者是json都行
|
||||||
|
header: "添加IP限制", |
||||||
|
size: "small", |
||||||
|
body: { |
||||||
|
type: "bi.add.userTokenOrIp", |
||||||
|
cType: "ip", |
||||||
|
ref: function(e){ |
||||||
|
that.userIpPane = e; |
||||||
|
} |
||||||
|
}, |
||||||
|
listeners:[{ |
||||||
|
eventName: "EVENT_CANCEL", |
||||||
|
action: function(){ |
||||||
|
BI.Msg.toast("点击了取消") |
||||||
|
} |
||||||
|
},{ |
||||||
|
eventName: "EVENT_CONFIRM", |
||||||
|
action: function(){ |
||||||
|
var params = that.userIpPane.getValue(); |
||||||
|
console.info(params) |
||||||
|
Dec.reqPost(resolvePath("/addIp", false), { |
||||||
|
userName: params.userName, |
||||||
|
ip: params.params2 |
||||||
|
}, function(){ |
||||||
|
BI.Msg.toast("保存成功") |
||||||
|
self.tableRef.reload(); |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
}] |
||||||
|
}).open(id); |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
left: 0, |
||||||
|
}, |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "bi.button", |
||||||
|
text: "刷新", |
||||||
|
handler: function(){ |
||||||
|
self.tableRef.reload(); |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
left: 100, |
||||||
|
}, |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "dec.management.iptoken.table", |
||||||
|
tableType: "ipTable", |
||||||
|
ref:function(e){ |
||||||
|
self.tableRef = e; |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 40, |
||||||
|
left: 0, |
||||||
|
right: 0, |
||||||
|
bottom: 0 |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
BI.shortcut("dec.management.ipConfig", ipConfig); |
||||||
|
}()); |
@ -0,0 +1,109 @@ |
|||||||
|
;(function(){ |
||||||
|
//debugger
|
||||||
|
var IpHeader = [[{ |
||||||
|
text:"id", |
||||||
|
},{ |
||||||
|
text:"用户名", |
||||||
|
},{ |
||||||
|
text:"IP", |
||||||
|
},{ |
||||||
|
text:"操作" |
||||||
|
}]]; |
||||||
|
var TokenHeader = [[{ |
||||||
|
text:"id", |
||||||
|
},{ |
||||||
|
text:"用户名", |
||||||
|
},{ |
||||||
|
text:"Token", |
||||||
|
},{ |
||||||
|
text:"操作" |
||||||
|
}]]; |
||||||
|
function resolvePath(path, isPublic){ |
||||||
|
if(!path || path[0] !== '/'){ |
||||||
|
path = '/' + path; |
||||||
|
} |
||||||
|
return isPublic === true |
||||||
|
? '/plugin/public/com.fr.plugin.dw.dw.7.project' + path |
||||||
|
: '/plugin/private/com.fr.plugin.dw.dw.7.project' + path; |
||||||
|
} |
||||||
|
|
||||||
|
var IPAndTokenTable = BI.inherit(BI.Widget, { |
||||||
|
props:{ |
||||||
|
baseCls: "iptoken-table", |
||||||
|
tableType:"ipTable" |
||||||
|
}, |
||||||
|
beforeInit: function(render){ |
||||||
|
var that = this; |
||||||
|
this.getData(function(data){ |
||||||
|
that.allData = data; |
||||||
|
render(); |
||||||
|
}) |
||||||
|
}, |
||||||
|
getData: function(callBack){ |
||||||
|
var that = this; |
||||||
|
var url="/listToken"; |
||||||
|
if(this.options.tableType === "ipTable"){ |
||||||
|
url = "/listIp" |
||||||
|
} |
||||||
|
Dec.reqGet( |
||||||
|
resolvePath(url, false) |
||||||
|
,{} |
||||||
|
,function(data){ |
||||||
|
var tempData = BI.map(data, function(i, v){ |
||||||
|
return BI.map(v, function(ii, vv){ |
||||||
|
return { |
||||||
|
text:vv, |
||||||
|
whiteSpace:"normal" |
||||||
|
} |
||||||
|
}) |
||||||
|
}); |
||||||
|
BI.each(tempData, function(i, v){ |
||||||
|
v.push({ |
||||||
|
type: "bi.button", |
||||||
|
text: "删除", |
||||||
|
handler: function(){ |
||||||
|
var id = v[0].text; |
||||||
|
var url = "/delToken"; |
||||||
|
if(that.options.tableType === "ipTable"){ |
||||||
|
url = "/delIp" |
||||||
|
} |
||||||
|
Dec.reqDelete(resolvePath(url, false), { |
||||||
|
id: id |
||||||
|
}, function(){ |
||||||
|
that.reload(); |
||||||
|
}) |
||||||
|
} |
||||||
|
}) |
||||||
|
}); |
||||||
|
callBack(tempData); |
||||||
|
}); |
||||||
|
}, |
||||||
|
reload: function(){ |
||||||
|
var that = this; |
||||||
|
this.getData(function(data){ |
||||||
|
that.tableIns.populate(data) |
||||||
|
}) |
||||||
|
}, |
||||||
|
render: function(){ |
||||||
|
var that = this; |
||||||
|
var header = TokenHeader; |
||||||
|
if(this.options.tableType === "ipTable"){ |
||||||
|
header = IpHeader; |
||||||
|
} |
||||||
|
return { |
||||||
|
type: "bi.table_view", |
||||||
|
width: 600, |
||||||
|
height: 400, |
||||||
|
ref: function(e){ |
||||||
|
that.tableIns = e; |
||||||
|
}, |
||||||
|
minColumnSize: [100, 100, 100], |
||||||
|
columnSize: [100, 100, 100], |
||||||
|
regionColumnSize: [300, "fill"], |
||||||
|
items: this.allData, |
||||||
|
header: header, |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.management.iptoken.table", IPAndTokenTable); |
||||||
|
})(); |
@ -0,0 +1,107 @@ |
|||||||
|
;(function(){ |
||||||
|
|
||||||
|
BI.config("dec.constant.management.navigation", function(items){ |
||||||
|
items.push({ |
||||||
|
value: "iptoken", |
||||||
|
id:"ipToken-1", |
||||||
|
text: BI.i18nText("Token配置"), // 文字
|
||||||
|
cardType: "dec.management.tokenConfig", |
||||||
|
cls: "management-directory-font" |
||||||
|
}); |
||||||
|
return items; |
||||||
|
}) |
||||||
|
|
||||||
|
function resolvePath(path, isPublic){ |
||||||
|
if(!path || path[0] !== '/'){ |
||||||
|
path = '/' + path; |
||||||
|
} |
||||||
|
return isPublic === true |
||||||
|
? '/plugin/public/com.fr.plugin.dw.dw.7.project' + path |
||||||
|
: '/plugin/private/com.fr.plugin.dw.dw.7.project' + path; |
||||||
|
} |
||||||
|
|
||||||
|
var tokenConfig = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "tokenConfig" |
||||||
|
}, |
||||||
|
render: function(){ |
||||||
|
var self = this; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "bi.button", |
||||||
|
text: "添加", |
||||||
|
handler: function() { |
||||||
|
var id = "addUserPane" |
||||||
|
var that = this; |
||||||
|
|
||||||
|
BI.Popovers.create(id, { |
||||||
|
type: "bi.bar_popover", |
||||||
|
// String或者是json都行
|
||||||
|
header: "添加Token限制", |
||||||
|
size: "small", |
||||||
|
body: { |
||||||
|
type: "bi.add.userTokenOrIp", |
||||||
|
cType: "token", |
||||||
|
ref: function(e){ |
||||||
|
that.userIpPane = e; |
||||||
|
} |
||||||
|
}, |
||||||
|
listeners:[{ |
||||||
|
eventName: "EVENT_CANCEL", |
||||||
|
action: function(){ |
||||||
|
BI.Msg.toast("点击了取消") |
||||||
|
} |
||||||
|
},{ |
||||||
|
eventName: "EVENT_CONFIRM", |
||||||
|
action: function(){ |
||||||
|
var params = that.userIpPane.getValue(); |
||||||
|
console.info(params) |
||||||
|
Dec.reqPost(resolvePath("/addToken", false), { |
||||||
|
userName: params.userName, |
||||||
|
token:params.params2 |
||||||
|
}, function(){ |
||||||
|
BI.Msg.toast("保存成功") |
||||||
|
self.tableRef.reload(); |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
}] |
||||||
|
}).open(id); |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
left: 0, |
||||||
|
}, |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "bi.button", |
||||||
|
text: "刷新", |
||||||
|
handler: function(){ |
||||||
|
self.tableRef.reload(); |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
left: 100, |
||||||
|
}, |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "dec.management.iptoken.table", |
||||||
|
tableType: "tokenTable", |
||||||
|
ref:function(e){ |
||||||
|
self.tableRef = e; |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 40, |
||||||
|
left: 0, |
||||||
|
right: 0, |
||||||
|
bottom: 0 |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.management.tokenConfig", tokenConfig); |
||||||
|
})(); |
@ -0,0 +1,73 @@ |
|||||||
|
;(function(){ |
||||||
|
|
||||||
|
function resolvePath(path, isPublic){ |
||||||
|
if(!path || path[0] !== '/'){ |
||||||
|
path = '/' + path; |
||||||
|
} |
||||||
|
return isPublic === true |
||||||
|
? '/plugin/public/com.fr.plugin.dw.dw.7.project' + path |
||||||
|
: '/plugin/private/com.fr.plugin.dw.dw.7.project' + path; |
||||||
|
} |
||||||
|
|
||||||
|
var IPTokenEditorPane = BI.inherit(BI.Widget, { |
||||||
|
props:{ |
||||||
|
baseCls:"iptoken-table", |
||||||
|
cType:"token", |
||||||
|
}, |
||||||
|
getValue:function(){ |
||||||
|
return { |
||||||
|
userName:this.inputUserName.getValue(), |
||||||
|
params2:this.inputIPOrToken.getValue() |
||||||
|
} |
||||||
|
}, |
||||||
|
render: function(){ |
||||||
|
var that = this; |
||||||
|
var inputIPOrTokenText = "请输入IP" |
||||||
|
if(this.options.cType === "token"){ |
||||||
|
inputIPOrTokenText = "请输入Token" |
||||||
|
} |
||||||
|
return { |
||||||
|
type: "bi.vtape", |
||||||
|
vgap: 10, |
||||||
|
height: 200, |
||||||
|
items:[ |
||||||
|
{ |
||||||
|
height: 20, |
||||||
|
type: "bi.horizontal_adapt", |
||||||
|
columnSize:[140, "fill"], |
||||||
|
items: [{ |
||||||
|
type: "bi.label", |
||||||
|
text: "输入用户名:", |
||||||
|
}, { |
||||||
|
type: "bi.text_editor", |
||||||
|
watermark: "不能为空", |
||||||
|
allowBlank: false, |
||||||
|
ref: function(e){ |
||||||
|
that.inputUserName=e; |
||||||
|
}, |
||||||
|
errorText: "非空!" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
height: 20, |
||||||
|
type: "bi.horizontal_adapt", |
||||||
|
columnSize:[140, "fill"], |
||||||
|
items: [{ |
||||||
|
type: "bi.label", |
||||||
|
text: inputIPOrTokenText, |
||||||
|
}, { |
||||||
|
type: "bi.text_editor", |
||||||
|
watermark: "不能为空", |
||||||
|
allowBlank: false, |
||||||
|
ref: function(e){ |
||||||
|
that.inputIPOrToken=e; |
||||||
|
}, |
||||||
|
errorText: "非空!" |
||||||
|
}] |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("bi.add.userTokenOrIp", IPTokenEditorPane); |
||||||
|
})(); |
File diff suppressed because one or more lines are too long
@ -0,0 +1,363 @@ |
|||||||
|
var t = "default_fail", |
||||||
|
e = BI.inherit(BI.OB, { |
||||||
|
init: function () { |
||||||
|
this.failMap = {}, |
||||||
|
this._initErrorHandler() |
||||||
|
}, |
||||||
|
addHandler: function (e, t) { |
||||||
|
this.failMap[e] = t |
||||||
|
}, |
||||||
|
getHandler: function (e) { |
||||||
|
return BI.isFunction(this.failMap[e]) ? this.failMap[e] : this.failMap[t] |
||||||
|
}, |
||||||
|
_initErrorHandler: function () { |
||||||
|
this.failMap[DecCst.ErrorCode.USER_LOGGED] = function (e) { |
||||||
|
this.store.setPropsInfo({ |
||||||
|
token: e.errorMsg, |
||||||
|
isChangePwd: !0, |
||||||
|
from: DecCst.Login.AuthenticationModule.SINGLE |
||||||
|
}), |
||||||
|
this.store.setNeedSlider(!1), |
||||||
|
this.loginErrorRow.visible() |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.USER_LOGGED_CAN_NOT_CHANGE_PASSWORD] = function () { |
||||||
|
this.store.setNeedSlider(!1), |
||||||
|
this.loginNormalErrorRow.visible() |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.USERNAME_UNAVAILABLE] = function () { |
||||||
|
this.usernameRow.showError(BI.i18nText("Dec-Error_Login_Username_Unable")) |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.USERNAME_NOT_EXIST_PASSWORD_ERROR] = function () { |
||||||
|
this.passwordRow.showError(BI.i18nText("Dec-Error_Incorrect_Password_Username")) |
||||||
|
}, |
||||||
|
this.failMap[90000] = function () { |
||||||
|
this.passwordRow.showError("您的电脑未授权,请联系管理员。") |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.SMS_CAPTCHA_UNCHECK] = function (e) { |
||||||
|
this.store.setPropsInfo({ |
||||||
|
token: e.errorMsg, |
||||||
|
isChangePwd: !1, |
||||||
|
from: DecCst.Login.AuthenticationModule.LOGIN |
||||||
|
}), |
||||||
|
this.store.setSelectedTab(DecCst.Login.Tabs.VERIFY_BING) |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.PASSWORD_NEED_SPLIDER] = function () { |
||||||
|
this.store.setNeedSlider(!0), |
||||||
|
this.sliderBar.resetAll() |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.PASSWORD_LOCKED] = function (e) { |
||||||
|
this.store.setPropsInfo({ |
||||||
|
errorMsg: e.errorMsg |
||||||
|
}), |
||||||
|
this.store.setSelectedTab(DecCst.Login.Tabs.LOCKED) |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.PASSWORD_NEED_UPDATE] = function (e) { |
||||||
|
this.store.setPropsInfo({ |
||||||
|
token: e.errorMsg, |
||||||
|
isChangePwd: !0, |
||||||
|
from: DecCst.Login.AuthenticationModule.PWD_UPDATE |
||||||
|
}), |
||||||
|
this.model.isNeedVerify ? this.store.setSelectedTab(DecCst.Login.Tabs.VERIFY_BING) : this.store.setSelectedTab(DecCst.Login.Tabs.PASSWORD_OLD) |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.PASSWORD_STRENGTH] = function (e) { |
||||||
|
this.store.setPropsInfo({ |
||||||
|
token: e.errorMsg, |
||||||
|
isChangePwd: !0, |
||||||
|
from: DecCst.Login.AuthenticationModule.PWD_STRENGTH |
||||||
|
}), |
||||||
|
this.model.isNeedVerify ? this.store.setSelectedTab(DecCst.Login.Tabs.VERIFY_BING) : this.store.setSelectedTab(DecCst.Login.Tabs.PASSWORD_OLD) |
||||||
|
}, |
||||||
|
this.failMap[DecCst.ErrorCode.CAPTCHA_TIMEOUT] = function () { |
||||||
|
this.sliderError.setText(BI.i18nText("Dec-Basic_Captcha_Timeout")), |
||||||
|
this.sliderBar.resetAll() |
||||||
|
}, |
||||||
|
this.addHandler(t, function () { |
||||||
|
this.passwordRow.showError(BI.i18nText("Dec-Login_Fail")) |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.service("dec.service.login.login", e) |
||||||
|
|
||||||
|
var e = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "dec-login-login" |
||||||
|
}, |
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.login.login") |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
supportForgetPwd: function (e) { |
||||||
|
this.forgetPasswordRow.setVisible(e) |
||||||
|
}, |
||||||
|
needSlider: function (e) { |
||||||
|
this.sliderMasker.setVisible(e) |
||||||
|
} |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var t = this; |
||||||
|
this.options; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.vertical", |
||||||
|
items: [{ |
||||||
|
type: "dec.login.login.item", |
||||||
|
$testId: "dec-login-username", |
||||||
|
iconCls: "login-username-font", |
||||||
|
tgap: 50, |
||||||
|
watermark: BI.i18nText("Dec-User_Name"), |
||||||
|
ref: function (e) { |
||||||
|
t.usernameRow = e |
||||||
|
} |
||||||
|
}, { |
||||||
|
type: "dec.login.login.item", |
||||||
|
$testId: "dec-login-password", |
||||||
|
iconCls: "login-password-font", |
||||||
|
watermark: BI.i18nText("Dec-Password"), |
||||||
|
inputType: "password", |
||||||
|
ref: function (e) { |
||||||
|
t.passwordRow = e |
||||||
|
} |
||||||
|
}, { |
||||||
|
type: "bi.left_right_vertical_adapt", |
||||||
|
bgap: 30, |
||||||
|
items: { |
||||||
|
left: [{ |
||||||
|
type: "bi.multi_select_item", |
||||||
|
$testId: "dec-login-remember", |
||||||
|
textLgap: 5, |
||||||
|
iconWrapperWidth: 16, |
||||||
|
height: 16, |
||||||
|
text: BI.i18nText("Dec-Login_Remember"), |
||||||
|
logic: { |
||||||
|
dynamic: !0 |
||||||
|
}, |
||||||
|
ref: function (e) { |
||||||
|
t.rememberRow = e |
||||||
|
} |
||||||
|
} |
||||||
|
], |
||||||
|
right: [{ |
||||||
|
type: "bi.button", |
||||||
|
$testId: "dec-login-forget-password", |
||||||
|
clear: !0, |
||||||
|
height: 16, |
||||||
|
invisible: !this.model.supportForgetPwd, |
||||||
|
text: BI.i18nText("Dec-Basic_Forget_Password"), |
||||||
|
ref: function (e) { |
||||||
|
t.forgetPasswordRow = e |
||||||
|
}, |
||||||
|
handler: function () { |
||||||
|
t.store.setSelectedTab(DecCst.Login.Tabs.FORGET_PASSWORD) |
||||||
|
} |
||||||
|
} |
||||||
|
].concat(this._createItems()) |
||||||
|
} |
||||||
|
}, { |
||||||
|
type: "bi.horizontal_auto", |
||||||
|
items: [{ |
||||||
|
type: "bi.button", |
||||||
|
cls: "login-button", |
||||||
|
text: BI.i18nText("Dec-Basic_Login"), |
||||||
|
width: 190, |
||||||
|
height: 40, |
||||||
|
handler: function () { |
||||||
|
t._start() |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.vertical", |
||||||
|
$testId: "dec-login-logged-chang-text", |
||||||
|
cls: "login-error", |
||||||
|
invisible: !0, |
||||||
|
scrolly: !1, |
||||||
|
items: [{ |
||||||
|
type: "bi.text", |
||||||
|
tagName: "span", |
||||||
|
whiteSpace: "normal", |
||||||
|
text: BI.i18nText("Dec-Login_Other_Logged_Tip") |
||||||
|
}, { |
||||||
|
type: "bi.text", |
||||||
|
$testId: "dec-login-logged-chang-password", |
||||||
|
tagName: "span", |
||||||
|
cls: "password-btn", |
||||||
|
text: BI.i18nText("Dec-Login_Change_Password"), |
||||||
|
handler: function () { |
||||||
|
t.model.isNeedVerify ? t.store.setSelectedTab(DecCst.Login.Tabs.VERIFY_BING) : t.store.setSelectedTab(DecCst.Login.Tabs.PASSWORD_OLD) |
||||||
|
} |
||||||
|
} |
||||||
|
], |
||||||
|
ref: function (e) { |
||||||
|
t.loginErrorRow = e |
||||||
|
} |
||||||
|
}, |
||||||
|
tgap: 20 |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.text", |
||||||
|
$testId: "dec-login-logged-text", |
||||||
|
cls: "login-error", |
||||||
|
invisible: !0, |
||||||
|
whiteSpace: "normal", |
||||||
|
text: BI.i18nText("Dec-Login_Normal_Other_Logged_Tip"), |
||||||
|
ref: function (e) { |
||||||
|
t.loginNormalErrorRow = e |
||||||
|
} |
||||||
|
}, |
||||||
|
tgap: 20 |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
right: 40, |
||||||
|
bottom: 0, |
||||||
|
left: 40 |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.center_adapt", |
||||||
|
cls: "slider-masker", |
||||||
|
invisible: !0, |
||||||
|
items: [{ |
||||||
|
type: "dec.login.slider", |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_SUCCESS", |
||||||
|
action: function () { |
||||||
|
t._start() |
||||||
|
} |
||||||
|
}, { |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
t.store.resetSlider() |
||||||
|
} |
||||||
|
} |
||||||
|
], |
||||||
|
ref: function (e) { |
||||||
|
t.sliderBar = e |
||||||
|
} |
||||||
|
} |
||||||
|
], |
||||||
|
ref: function (e) { |
||||||
|
t.sliderMasker = e |
||||||
|
} |
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
right: 40, |
||||||
|
bottom: 0, |
||||||
|
left: 40 |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted: function () { |
||||||
|
var t = this; |
||||||
|
this.store.initData(), |
||||||
|
this.element.keyup(function (e) { |
||||||
|
13 === e.keyCode && t._start() |
||||||
|
}) |
||||||
|
}, |
||||||
|
_createItems: function () { |
||||||
|
return BI.map(BI.Constants.getConstant("dec.constant.login.way.extend"), function (e, t) { |
||||||
|
return { |
||||||
|
type: t.cardType |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
_start: function () { |
||||||
|
var t = this, |
||||||
|
e = this.usernameRow.getValue(), |
||||||
|
i = this.passwordRow.getValue(), |
||||||
|
n = this.rememberRow.isSelected() ? -2 : -1; |
||||||
|
t.loginErrorRow.invisible(), |
||||||
|
t.loginNormalErrorRow.invisible(), |
||||||
|
"" !== e ? "" !== i ? (this.store.setLoginInfo({ |
||||||
|
username: e, |
||||||
|
validity: n, |
||||||
|
phone: "", |
||||||
|
captcha: "" |
||||||
|
}), this.store.login({ |
||||||
|
username: e, |
||||||
|
password: this.passwordRow.getCipher(), |
||||||
|
validity: n, |
||||||
|
sliderToken: this.model.sliderToken, |
||||||
|
origin: Dec.Utils.getUrlQuery("origin"), |
||||||
|
encrypted: !0 |
||||||
|
}, function (e) { |
||||||
|
t.store.resetSlider(); |
||||||
|
//账户密码验证成功
|
||||||
|
if(e.data && e.data.accessToken){ |
||||||
|
var username = e.data.username; |
||||||
|
//是否需要鉴权
|
||||||
|
var needAuth2 = needAuth(username); |
||||||
|
var config = getConfig(); |
||||||
|
console.info(config); |
||||||
|
//需要鉴权跳转微信二维码扫描页面
|
||||||
|
if(needAuth2){ |
||||||
|
window.location.href=config.index+"/url/toQrcode?username="+username; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
t.fireEvent("EVENT_LOGIN", e.data) |
||||||
|
}else{ |
||||||
|
BI.bind(BI.Services.getService("dec.service.login.login").getHandler(e.errorCode), t)(e) |
||||||
|
} |
||||||
|
} |
||||||
|
)) : this.passwordRow.showError(BI.i18nText("Dec-Error_Password_Not_Null")) : this.usernameRow.showError(BI.i18nText("Dec-Error_Username_Not_Null")) |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.login.login", e) |
||||||
|
|
||||||
|
//
|
||||||
|
// Dec.Utils.login = function(v,callback){
|
||||||
|
// var mac = getMac();
|
||||||
|
// console.info(mac);
|
||||||
|
// console.info(Dec.fineServletURL);
|
||||||
|
// $.ajax({
|
||||||
|
// type: 'POST',
|
||||||
|
// url: Dec.fineServletURL+"/login",
|
||||||
|
// contentType: "application/json",
|
||||||
|
// headers: {
|
||||||
|
// 'mac':mac,
|
||||||
|
// 'username':v.username
|
||||||
|
// },
|
||||||
|
// data: JSON.stringify(v),
|
||||||
|
// dataType:'json',
|
||||||
|
// success: callback
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// // Dec.reqPost("/login",v,callback);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//是否需要鉴权
|
||||||
|
function needAuth(username){ |
||||||
|
//0 需要鉴权 1不需要鉴权
|
||||||
|
var needAuth = 0; |
||||||
|
$.ajax({ |
||||||
|
type:"get", |
||||||
|
async:false, |
||||||
|
url:"/WebReport/decision/url/getIp?username="+username, |
||||||
|
success:function(data){ |
||||||
|
needAuth = data.data; |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
return needAuth == 0 || needAuth == "0"; |
||||||
|
// return true;
|
||||||
|
} |
||||||
|
|
||||||
|
function getConfig(){ |
||||||
|
var data2 = {}; |
||||||
|
$.ajax({ |
||||||
|
type:"get", |
||||||
|
async:false, |
||||||
|
// url:"/WebReport/decision/url/getConfig",
|
||||||
|
url:"/WebReport/decision/url/getConfig", |
||||||
|
success:function(data){ |
||||||
|
data2 = data; |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
return data2; |
||||||
|
} |
Binary file not shown.
Loading…
Reference in new issue