package com.hwlcn.security.web.filter; import com.hwlcn.security.SecurityUtils; import com.hwlcn.security.subject.Subject; import com.hwlcn.security.web.util.WebUtils; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; public abstract class AccessControlFilter extends PathMatchingFilter { public static final String DEFAULT_LOGIN_URL = "/login.jsp"; public static final String GET_METHOD = "GET"; public static final String POST_METHOD = "POST"; private String loginUrl = DEFAULT_LOGIN_URL; public String getLoginUrl() { return loginUrl; } public void setLoginUrl(String loginUrl) { this.loginUrl = loginUrl; } protected Subject getSubject(ServletRequest request, ServletResponse response) { return SecurityUtils.getSubject(); } protected abstract boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception; protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { return onAccessDenied(request, response); } protected abstract boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception; public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue); } protected boolean isLoginRequest(ServletRequest request, ServletResponse response) { return pathsMatch(getLoginUrl(), request); } protected void saveRequestAndRedirectToLogin(ServletRequest request, ServletResponse response) throws IOException { saveRequest(request); redirectToLogin(request, response); } protected void saveRequest(ServletRequest request) { WebUtils.saveRequest(request); } protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException { String loginUrl = getLoginUrl(); WebUtils.issueRedirect(request, response, loginUrl); } }