You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.8 KiB
107 lines
3.8 KiB
package com.fr.plugin; |
|
|
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
|
import com.fr.decision.webservice.v10.login.LoginService; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
|
import com.fr.plugin.transform.FunctionRecorder; |
|
import com.fr.stable.StringUtils; |
|
import com.fr.web.utils.WebUtils; |
|
import org.json.JSONObject; |
|
|
|
import javax.servlet.FilterChain; |
|
import javax.servlet.FilterConfig; |
|
import javax.servlet.ServletException; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
import java.io.IOException; |
|
import java.io.PrintWriter; |
|
import java.io.StringWriter; |
|
import java.nio.charset.StandardCharsets; |
|
import java.security.MessageDigest; |
|
import java.security.NoSuchAlgorithmException; |
|
import java.util.HashMap; |
|
import java.util.Map; |
|
|
|
@FunctionRecorder(localeKey = "ffe") |
|
public class NDXloginFilter extends AbstractGlobalRequestFilterProvider { |
|
@Override |
|
public String filterName() { |
|
return "ndLoginxxxxxxx"; |
|
} |
|
|
|
@Override |
|
public String[] urlPatterns() { |
|
return new String[]{ |
|
"/dee" |
|
}; |
|
} |
|
|
|
@Override |
|
public void init(FilterConfig filterConfig) { |
|
NDConfig.getInstance(); |
|
FineLoggerFactory.getLogger().info("登录插件初始化"); |
|
super.init(filterConfig); |
|
} |
|
|
|
@Override |
|
@ExecuteFunctionRecord |
|
public void doFilter(HttpServletRequest request, HttpServletResponse httpServletResponse, FilterChain filterChain) { |
|
try { |
|
String token = WebUtils.getHTTPRequestParameter(request, "token"); |
|
if (StringUtils.isNotBlank(token)) { |
|
NDConfig ndConfig = NDConfig.getInstance(); |
|
String url = String.format("%s?Token=%s&Sys=%s",ndConfig.getValAddr(),token,ndConfig.getAppId()); |
|
Map<String, Object> params = new HashMap<>(); |
|
params.put("Token", token); |
|
params.put("Sys", ndConfig.getAppId()); |
|
String json = HttpUtils.httpPost(url, params); |
|
if (StringUtils.isNotBlank(json)) { |
|
JSONObject jsonObject = new JSONObject(json); |
|
String result = jsonObject.getString("result"); |
|
if (StringUtils.equals(result,"True")) { |
|
String empNo = jsonObject.getString("empNo"); |
|
login(request, httpServletResponse, empNo); |
|
} |
|
} |
|
FineLoggerFactory.getLogger().info("登录认证,收到token :", token); |
|
} |
|
filterChain.doFilter(request, httpServletResponse); |
|
} catch (IOException | ServletException e) { |
|
printException2FrLog(e); |
|
} catch (Exception e) { |
|
printException2FrLog(e); |
|
} |
|
} |
|
|
|
public static void printException2FrLog(Throwable e) { |
|
StringWriter writer = new StringWriter(); |
|
e.printStackTrace(new PrintWriter(writer)); |
|
String s = writer.toString(); |
|
FineLoggerFactory.getLogger().error("错误:{}", s); |
|
} |
|
|
|
private void sendRedirect(HttpServletResponse res, String url) { |
|
res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); |
|
res.setHeader("Location", url); |
|
} |
|
|
|
|
|
private void login(HttpServletRequest req, HttpServletResponse res, String username) { |
|
String token = null; |
|
try { |
|
token = LoginService.getInstance().login(req, res, username); |
|
req.setAttribute("fine_auth_token", token); |
|
FineLoggerFactory.getLogger().error("login success"); |
|
} catch (Exception e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
FineLoggerFactory.getLogger().error("login failed"); |
|
} |
|
} |
|
|
|
private boolean isLogin(HttpServletRequest req) { |
|
return LoginService.getInstance().isLogged(req); |
|
} |
|
|
|
|
|
}
|
|
|