过滤器Filter的写法及注意事项
在登陆模块的开发过程中,肯定要写过滤器这一功能,保证安全,其原理就是:当session中的用户丢失了就拦截相关操作,只有当session中的用户存在的时候,才可以顺利请求服务器进行相关操作。
过滤器的写法分为两步:
第一步:创建过滤器这个类,声明过滤条件,该类必须实现Filter,implement Filter(导包的时候不要导错了,是servlet中的),代码写法如下:
第二步:在web.xml中配置过滤器,统一写法
<filter>
<display-name>LoginFilter</display-name>
<filter-name>LoginFilter<filter-name>
<filter-class>com.baidu.goods.user.web.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/jsps/*</url-pattern>
</filter-mapping>
实例如下:
这样,当session中的用户丢失的时候就会过滤掉url-pattern中的所有请求,要求用户必须登录。
除了在web.xml中配置过滤器,还可以用注解的方式,如下图:
urlPatterns中填写需要过滤的路径,servletNames中填写需要过滤的servlet,过滤的路径中可以不填写servlet的路径,在servletNames中填写servlet就可以了,但是,这里隐含着一个很大的问题,servletNames中声明过滤的servlet必须在web.xml中配置过,否则无效,也就是servletNames中的servlet对注解方式的servlet无效。所以综上所述:为保证安全,当开发人员使用注解的方式配置过滤器时,urlPatterns中最好是写完整所有要过滤的路径,包含jsp页面,servlet控制层,而所有的servlet都应该优先采用配置web.xml的方式,而不是注解的方式,注解只对运行时的请求有效,filter会优先寻找web.xml中的servlet。