/** * */ package security.filter; import java.util.Collection; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.ConfigAttributeDefinition; import org.springframework.security.intercept.web.FilterInvocation; import org.springframework.security.intercept.web.FilterInvocationDefinitionSource; import security.Constants; import security.SecUser; import security.SecurityAppUserHolder; import security.internal.SecurityAuthoritiesHolder; import security.util.AuthenticationUtil; /** * URL过虑器 * */ public class UrlResourceFilterInvocationDefinitionSource implements FilterInvocationDefinitionSource { private static final Logger logger=LoggerFactory.getLogger(UrlResourceFilterInvocationDefinitionSource.class); private SecurityAuthoritiesHolder securityAuthoritiesHolder; public ConfigAttributeDefinition getAttributes(Object filter) throws IllegalArgumentException { if ((filter == null) || !this.supports(filter.getClass())) { throw new IllegalArgumentException("Sorry, the target object is not FilterInvocation type!"); } SecUser user = SecurityAppUserHolder.getCurrentUser(); // 用户是否已登陆 if (null == user) { return ConfigAttributeDefinition.NO_ATTRIBUTES; } FilterInvocation filterInvocation = (FilterInvocation) filter; // 待验证URL String requestURI = filterInvocation.getRequestUrl(); if (logger.isDebugEnabled()) { logger.debug("To be verified: " + requestURI); } Map urlAuthorities = this.securityAuthoritiesHolder.loadAuthorities(Constants.RESTYPE_URL); // 得到该URL允许的角色串 String authorities = AuthenticationUtil.resourceMatches(urlAuthorities, requestURI); return AuthenticationUtil.getCadByAuthorities(authorities); } @SuppressWarnings("rawtypes") public Collection getConfigAttributeDefinitions() { return null; } @SuppressWarnings("rawtypes") public boolean supports(Class clazz) { if (FilterInvocation.class.isAssignableFrom(clazz)) { return true; } else { return false; } } public void setSecurityAuthoritiesHolder( SecurityAuthoritiesHolder securityAuthoritiesHolder) { this.securityAuthoritiesHolder = securityAuthoritiesHolder; } }