Created
June 11, 2015 03:40
-
-
Save hengyunabc/cfea026f69c6352986ab to your computer and use it in GitHub Desktop.
SignInFilter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<filter> | |
<filter-name>signInFilter</filter-name> | |
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> | |
</filter> | |
<filter-mapping> | |
<filter-name>signInFilter</filter-name> | |
<url-pattern>/*</url-pattern> | |
</filter-mapping> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.github.xdiamond.web.filter; | |
import java.io.IOException; | |
import javax.servlet.Filter; | |
import javax.servlet.FilterChain; | |
import javax.servlet.FilterConfig; | |
import javax.servlet.ServletException; | |
import javax.servlet.ServletRequest; | |
import javax.servlet.ServletResponse; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import javax.servlet.http.HttpSession; | |
import org.apache.commons.lang3.StringUtils; | |
import org.springframework.stereotype.Service; | |
/** | |
* 可以配置pathsToBeIgnored 参数,跳过验证的路径。多个路径以","分隔。 | |
* 如"/resources,/signin"。 | |
* @author hengyunabc | |
* | |
*/ | |
@Service | |
public class SignInFilter implements Filter { | |
String[] ignoredPathsArray = { "/resources", "/signin" }; | |
@Override | |
public void init(FilterConfig filterConfig) throws ServletException { | |
String paths = filterConfig.getInitParameter("pathsToBeIgnored"); | |
if (paths != null) { | |
String[] split = StringUtils.split(paths, ','); | |
if (split != null) { | |
ignoredPathsArray = split; | |
} | |
} | |
} | |
@Override | |
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, | |
ServletException { | |
HttpServletRequest httpServletRequest = (HttpServletRequest) request; | |
String contextPath = httpServletRequest.getContextPath(); | |
String requestURI = httpServletRequest.getRequestURI(); | |
// 跳过/resources, /signin 的路径 | |
for (String path : ignoredPathsArray) { | |
if (requestURI.startsWith(contextPath + path)) { | |
chain.doFilter(request, response); | |
return; | |
} | |
} | |
HttpSession session = httpServletRequest.getSession(); | |
Object attribute = session.getAttribute("signInUser"); | |
if (attribute != null) { | |
chain.doFilter(request, response); | |
return; | |
} | |
HttpServletResponse httpResponse = (HttpServletResponse) response; | |
httpResponse.sendRedirect(contextPath + "/signin"); | |
} | |
@Override | |
public void destroy() { | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment