第一步:创建过滤器,引入bean
public class SystemUrlFilter implements Filter {
@Autowired
private UserService userService;
private String[] prefixIignores ;
private String ignoresParam;
@Override
public void init(FilterConfig config) throws ServletException {
ignoresParam = config.getInitParameter("exclusions");
if (StringUtils.isNotEmpty(ignoresParam)) {
prefixIignores = ignoresParam.split(",");
}
return;
}
@Override
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
if (canIgnore(request)) {
chain.doFilter(request, response);
return;
}
Map<String, Object> attributes = principal.getAttributes();
String username = (String) attributes.get("username");
User user = null;
try {
user = userService.findUserByUsername(username);
chain.doFilter(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
prefixIignores=null;
}
private boolean canIgnore(HttpServletRequest request) {
boolean isExcludedPage = false;
for (String page : prefixIignores) {// 判断是否在过滤url之外
if (((HttpServletRequest) request).getServletPath().equals(page)) {
isExcludedPage = true;
break;
}
}
return isExcludedPage;
}
第二步:注册filter到配置中
@Configuration
public class WebConfig
/**
* 拦截用户访问系统权限fi
* @return
*/
@Bean
public FilterRegistrationBean systemUrlFilterBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new DelegatingFilterProxy("systemUrlFilter"));
registrationBean.addInitParameter("targetFilterLifecycle","true");
registrationBean.addUrlPatterns("/*");
registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/reg");
registrationBean.setDispatcherTypes(DispatcherType.REQUEST);
return registrationBean;
}
@Bean(name="systemUrlFilter")
public SystemUrlFilter systemUrlFilter(){
return new SystemUrlFilter();
}