JSD-8075 自定义token单点
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

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);
}
}