第一步:创建过滤器,引入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();
}
本文介绍了一种系统URL过滤器的实现方式,该过滤器通过拦截特定URL来控制用户访问系统的权限。首先创建了一个名为SystemUrlFilter的过滤器类,并在其中实现了过滤逻辑。接着在配置文件中注册了该过滤器,设置了排除规则,如静态资源和注册页面等。
1717

被折叠的 条评论
为什么被折叠?



