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.

102 lines
3.6 KiB

3 years ago
package com.fr.plugin.core;
import com.fr.data.NetworkHelper;
import com.fr.decision.authority.data.User;
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.log.FineLoggerProvider;
import com.fr.plugin.core.ws.BizServiceAxis;
import com.fr.plugin.core.ws.BizServiceAxisServiceLocator;
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.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;
@FunctionRecorder
public class CKLoginFilter extends AbstractGlobalRequestFilterProvider {
@Override
public String filterName() {
return "ckfilter";
}
@Override
public String[] urlPatterns() {
return new String[]{
"/rewrewrewrw321"
};
}
@Override
@ExecuteFunctionRecord
public void init(FilterConfig filterConfig) {
super.init(filterConfig);
}
private String getUrl(HttpServletRequest request) {
return request.getRequestURL()+"?"+request.getQueryString();
}
private void sendRedirect(HttpServletResponse res, String url) {
res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
res.setHeader("Location", url);
}
@Override
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) {
try {
FineLoggerProvider logger = FineLoggerFactory.getLogger();
String userID = req.getParameter("userID");
String userName = req.getParameter("userName");
String PID = req.getParameter("PID");
String sessionID = req.getParameter("sessionID");
String WSUrl = req.getParameter("WSUrl");
String verifySSO = req.getParameter("verifySSO");
if (StringUtils.isNotBlank(userID) && StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(PID) && StringUtils.isNotBlank(sessionID) && StringUtils.isNotBlank(WSUrl)) {
String originalURL = NetworkHelper.getOriginalURL(req,false);
String url = getUrl(req);
logger.info("服访问地地址++++++:{} 自己生成的URL : {}", originalURL,url);
login(req, res, PID);
sendRedirect(res, url);
return;
}
filterChain.doFilter(req, res);
} catch (Exception e) {
e.printStackTrace();
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
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);
} catch (Exception e) {
}
}
private static Document getAccountFromXML(String xml) throws DocumentException {
//1.创建Reader对象
SAXReader reader = new SAXReader();
//2.加载xml
return reader.read(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
}
}