非spring boot项目整合SSO
zhaojieip opened this issue · comments
1.将XxlSsoWebFilter.java 放入项目中
`package com.xxl.sso.core.filter;
import com.xxl.sso.core.conf.Conf;
import com.xxl.sso.core.login.SsoWebLoginHelper;
import com.xxl.sso.core.path.impl.AntPathMatcher;
import com.xxl.sso.core.user.XxlSsoUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
-
web sso filter
-
@author xuxueli 2018-04-03
*/
public class XxlSsoWebFilter extends HttpServlet implements Filter {
private static Logger logger = LoggerFactory.getLogger(XxlSsoWebFilter.class);private static final AntPathMatcher antPathMatcher = new AntPathMatcher();
private String ssoServer;
private String logoutPath;
private String excludedPaths;@OverRide
public void init(FilterConfig filterConfig) throws ServletException {ssoServer = filterConfig.getInitParameter(Conf.SSO_SERVER); logoutPath = filterConfig.getInitParameter(Conf.SSO_LOGOUT_PATH); excludedPaths = filterConfig.getInitParameter(Conf.SSO_EXCLUDED_PATHS); logger.info("XxlSsoWebFilter init.");
}
@OverRide
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;// make url String servletPath = req.getServletPath(); // excluded path check if (excludedPaths!=null && excludedPaths.trim().length()>0) { for (String excludedPath:excludedPaths.split(",")) { String uriPattern = excludedPath.trim(); // 支持ANT表达式 if (antPathMatcher.match(uriPattern, servletPath)) { // excluded path, allow chain.doFilter(request, response); return; } } } // logout path check if (logoutPath!=null && logoutPath.trim().length()>0 && logoutPath.equals(servletPath)) { // remove cookie SsoWebLoginHelper.removeSessionIdByCookie(req, res); // redirect logout String logoutPageUrl = ssoServer.concat(Conf.SSO_LOGOUT); res.sendRedirect(logoutPageUrl); return; } // valid login user, cookie + redirect XxlSsoUser xxlUser = SsoWebLoginHelper.loginCheck(req, res); // valid login fail if (xxlUser == null) { String header = req.getHeader("content-type"); boolean isJson= header!=null && header.contains("json"); if (isJson) { // json msg res.setContentType("application/json;charset=utf-8"); res.getWriter().println("{\"code\":"+Conf.SSO_LOGIN_FAIL_RESULT.getCode()+", \"msg\":\""+ Conf.SSO_LOGIN_FAIL_RESULT.getMsg() +"\"}"); return; } else { // total link String link = req.getRequestURL().toString(); // redirect logout String loginPageUrl = ssoServer.concat(Conf.SSO_LOGIN) + "?" + Conf.REDIRECT_URL + "=" + link; res.sendRedirect(loginPageUrl); return; } } // ser sso user request.setAttribute(Conf.SSO_USER, xxlUser); // already login, allow chain.doFilter(request, response); return;
}
}
`
2.web.xml加入配置
XxlSsoWebFilter
com.it.config.XxlSsoWebFilter
sso_server
http://你的IP:端口/xxl-sso-server
SSO_LOGOUT_PATH
/logout
SSO_EXCLUDED_PATHS
XxlSsoWebFilter
/*