1.这是登录验证的注解方式
@WebFilter(filterName = "LoginFilter",urlPatterns = {"*.do","*.jsp"})
public class LoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest request= (HttpServletRequest)req;
HttpServletResponse response= (HttpServletResponse)resp;
HttpSession session=request.getSession();
String path=request.getRequestURI();
String requestPath=path.substring(path.indexOf("/") + 1, path.length());
if(requestPath.equals("login.jsp")||requestPath.equals("login.do")||requestPath.contains(".jsp")){
chain.doFilter(req, resp);
}else {
if(session!=null){
session.getAttributeNames();
Object o=session.getAttribute("name");
if(o==null||o.toString().equals("")){
path="login.jsp";
}else {
chain.doFilter(req, resp);
}
}else {
path="login.jsp";
}
request.getRequestDispatcher(path).forward(request,response);
}
}
public void init(FilterConfig config) throws ServletException {
}
}
我们查看@WebFilter的源码,里面的urlPatterns是数组形式的
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebFilter {
String description() default "";
String displayName() default "";
WebInitParam[] initParams() default {};
String filterName() default "";
String smallIcon() default "";
String largeIcon() default "";
String[] servletNames() default {};
String[] value() default {};
String[] urlPatterns() default {};
DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST};
boolean asyncSupported() default false;
}
2.我们再看xml配置方式
<filter> <filter-name>LoginFilter</filter-name> <filter-class>com.lrq.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
第一行过滤器名,第二行过滤器类的位置,第四个url路径指明你要过滤的是什么/*过滤全部;/*.jsp只过滤jsp文件
其他依次类推,同样适用于一般的servlet和Listener监听器