业务需求背景:
项目采用微服务架构,在各个服务前面配置一个网关,通过SpringCloud生态中的Zuul组件实现。
该网关同时负责页面调度,在各个单页面应用子产品的页面之间进行调度。
ZuulFilter挺有意思,对于本服务的Controller请求不会进行拦截,因此需要针对页面请求做一个认证鉴权的Filter。
实现第一版
首先实现一个Filter进行鉴权及页面重定向(未登录认证状态下跳转到登录页面)。
大体逻辑如下:
①通过WebFilter进行Filter声明,这样容器在进行部署的时候就会处理该Filter,创建实例并创建配置对象FilterConfig,然后会将该Filter应用到urlPatterns所指定的url;
②在init方法中获取到初始化参数,自定义的excludedUrls,作为成员在后续执行过滤逻辑的时候使用;
③在doFilter中进行url的鉴定,如果需要执行认证鉴权处理,则执行相应逻辑。不满足条件的情况下重定向到登录页;
④Filter类增加Component注解,让该Filter被容器管理。
@Component
@WebFilter(filterName = "WebAuthFilter", urlPatterns = "/web/*",
initParams = {
@WebInitParam(name = "excludedUrls", value = "/web/login")
}
)
public class WebAuthFilter implements Filter {
private List<String> excludedUrlList;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String excludedUrls = filterConfig.getInitParameter("excludeUrls");
excludedUrlList = Splitter.on(