Browse Source

http认证可配置

master
richie 5 years ago
parent
commit
20e533e8a2
  1. BIN
      lib/finekit-10.0.jar
  2. 10
      plugin.xml
  3. 9
      pom.xml
  4. 40
      src/main/java/com/fr/decision/auth/http/HttpAuthorizeBridge.java
  5. 23
      src/main/java/com/fr/decision/auth/http/HttpAuthorizeInitializeMonitor.java
  6. 15
      src/main/java/com/fr/decision/auth/http/HttpAuthorizeLocaleBridge.java
  7. 42
      src/main/java/com/fr/decision/auth/http/config/HttpAuthorizeConfig.java
  8. 2
      src/main/resources/com/fr/decision/auth/http/http.properties
  9. 2
      src/main/resources/com/fr/decision/auth/http/http_en_US.properties
  10. 2
      src/main/resources/com/fr/decision/auth/http/http_zh_CN.properties

BIN
lib/finekit-10.0.jar

Binary file not shown.

10
plugin.xml

@ -1,18 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plugin>
<id>com.fr.decision.auth.http</id>
<main-package>com.fr.decision.auth.http</main-package>
<name><![CDATA[http认证]]></name>
<active>yes</active>
<version>1.0</version>
<version>1.1</version>
<env-version>10.0~</env-version>
<jartime>2018-10-20</jartime>
<vendor>author</vendor>
<description><![CDATA[定制http认证。]]></description>
<change-notes><![CDATA[
[2019-09-20]增加了灵活的脚本配置。<br/>
[2018-11-22]增加了插件功能说明。<br/>
]]></change-notes>
<extra-core>
<LocaleFinder class="com.fr.decision.auth.http.HttpAuthorizeLocaleBridge"/>
</extra-core>
<extra-decision>
<HttpAuthorizeProvider class="com.fr.decision.auth.http.HttpAuthorizeBridge"/>
</extra-decision>
<lifecycle-monitor class="com.fr.decision.auth.http.HttpAuthorizeInitializeMonitor"/>
<function-recorder class="com.fr.decision.auth.http.HttpAuthorizeBridge"/>
</plugin>

9
pom.xml

@ -11,6 +11,15 @@
</parent>
<packaging>jar</packaging>
<artifactId>demo-auth-http</artifactId>
<dependencies>
<dependency>
<groupId>com.fanruan.api</groupId>
<artifactId>finekit</artifactId>
<version>10.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/finekit-10.0.jar</systemPath>
</dependency>
</dependencies>
<build>
<!---如果要更改调试插件,改这里的配置就可以了-->
<outputDirectory>${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.decision.auth.http-1.0/classes</outputDirectory>

40
src/main/java/com/fr/decision/auth/http/HttpAuthorizeBridge.java

@ -1,23 +1,30 @@
package com.fr.decision.auth.http;
import com.fr.decision.authorize.impl.HttpPassport;
import com.fr.decision.config.FSConfig;
import com.fanruan.api.decision.login.LoginKit;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.net.http.HttpKit;
import com.fanruan.api.script.ScriptKit;
import com.fanruan.api.util.StringKit;
import com.fr.decision.auth.http.config.HttpAuthorizeConfig;
import com.fr.decision.fun.impl.AbstractHttpAuthorizeProvider;
import com.fr.general.http.HttpToolbox;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.log.FineLoggerFactory;
import com.fr.record.analyzer.EnableMetrics;
import javax.script.ScriptEngine;
import java.util.HashMap;
import java.util.Map;
/**
* http认证更改内置的认证逻辑只要返回值不是"false"则认为是认证成功的
* http认证更改内置的认证逻辑可以通过脚本制定判断认证成功或者失败的策略
*/
@EnableMetrics
public class HttpAuthorizeBridge extends AbstractHttpAuthorizeProvider {
private static final String SCRIPT_TPL = "(function(username, value) {return %s;})(\"%s\", \"%s\")";
private ScriptEngine engine = ScriptKit.newScriptEngine();
@Override
public Scope scope() {
return Scope.REPLACE;
@ -29,15 +36,32 @@ public class HttpAuthorizeBridge extends AbstractHttpAuthorizeProvider {
Map<String, String> queryMap = new HashMap<String, String>();
queryMap.put("username", username);
queryMap.put("inputPassword", inputPassword);
HttpPassport httpPassport = (HttpPassport) FSConfig.getInstance().getPassport();
String httpUrl = LoginKit.getHttpPassportUrl();
if (StringKit.isEmpty(httpUrl)) {
return false;
}
try {
String resultText = HttpToolbox.get(httpPassport.getUrl(), queryMap);
String resultText = HttpKit.get(httpUrl, queryMap);
String condition = HttpAuthorizeConfig.getInstance().getCondition();
if (StringKit.isBlank(condition)) {
if (!"false".equals(resultText)) {
return true;
}
} else {
Object r = engine.eval(String.format(SCRIPT_TPL, HttpAuthorizeConfig.getInstance().getCondition(), username, resultText));
if (Boolean.TRUE == r) {
return true;
}
}
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
LogKit.error(e.getMessage(), e);
}
return false;
}
public static void main(String... args) throws Exception {
ScriptEngine scriptEngine = ScriptKit.newScriptEngine();
Object r = scriptEngine.eval(String.format(SCRIPT_TPL, "value!=\"false\"", "alex", "false"));
System.out.println("r=" + r);
}
}

23
src/main/java/com/fr/decision/auth/http/HttpAuthorizeInitializeMonitor.java

@ -0,0 +1,23 @@
package com.fr.decision.auth.http;
import com.fr.decision.auth.http.config.HttpAuthorizeConfig;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor;
/**
* @author richie
* @version 10.0
* Created by richie on 2019/9/20
*/
public class HttpAuthorizeInitializeMonitor extends AbstractPluginLifecycleMonitor {
@Override
public void afterRun(PluginContext pluginContext) {
HttpAuthorizeConfig.getInstance();
}
@Override
public void beforeStop(PluginContext pluginContext) {
}
}

15
src/main/java/com/fr/decision/auth/http/HttpAuthorizeLocaleBridge.java

@ -0,0 +1,15 @@
package com.fr.decision.auth.http;
import com.fr.stable.fun.impl.AbstractLocaleFinder;
/**
* @author richie
* @version 10.0
* Created by richie on 2019/9/20
*/
public class HttpAuthorizeLocaleBridge extends AbstractLocaleFinder {
@Override
public String find() {
return "com/fr/decision/auth/http/http";
}
}

42
src/main/java/com/fr/decision/auth/http/config/HttpAuthorizeConfig.java

@ -0,0 +1,42 @@
package com.fr.decision.auth.http.config;
import com.fanruan.api.conf.BaseConfiguration;
import com.fanruan.api.conf.HolderKit;
import com.fr.config.Identifier;
import com.fr.config.Status;
import com.fr.config.holder.Conf;
/**
* @author richie
* @version 10.0
* Created by richie on 2019/9/20
*/
public class HttpAuthorizeConfig extends BaseConfiguration {
private static volatile HttpAuthorizeConfig instance;
public static HttpAuthorizeConfig getInstance() {
if (instance == null) {
instance = getConfigInstance(HttpAuthorizeConfig.class);
}
return instance;
}
@Identifier(value = "condition", name = "Plugin-Http_Config_Property_Text", description = "Plugin-Http_Config_Property_Text_Description", status = Status.SHOW)
private Conf<String> condition = HolderKit.simple("res != \"false\"");
public String getCondition() {
return condition.get();
}
public void setCondition(String condition) {
this.condition.set(condition);
}
@Override
public Object clone() throws CloneNotSupportedException {
HttpAuthorizeConfig cloned = (HttpAuthorizeConfig) super.clone();
cloned.condition = (Conf<String>) condition.clone();
return cloned;
}
}

2
src/main/resources/com/fr/decision/auth/http/http.properties

@ -0,0 +1,2 @@
Plugin-Http_Config_Property_Text=Condition Script Text
Plugin-Http_Config_Property_Text_Description=ES5 script text, value as http return text and username as input username

2
src/main/resources/com/fr/decision/auth/http/http_en_US.properties

@ -0,0 +1,2 @@
Plugin-Http_Config_Property_Text=Condition Script Text
Plugin-Http_Config_Property_Text_Description=ES5 script text, value as http return text and username as input username

2
src/main/resources/com/fr/decision/auth/http/http_zh_CN.properties

@ -0,0 +1,2 @@
Plugin-Http_Config_Property_Text=\u5224\u65AD\u811A\u672C
Plugin-Http_Config_Property_Text_Description=\u652F\u6301ES5\u7684JavaScript\u811A\u672C\uFF0C\u53C2\u6570username\u548Cvalue\u5206\u522B\u8868\u793A\u8F93\u5165\u7684\u7528\u6237\u540D\u548Chttp\u8BA4\u8BC1\u670D\u52A1\u5668\u8FD4\u56DE\u7684\u6587\u672C
Loading…
Cancel
Save