开篇例子帮助学习
我们的朋友小猪喜欢在家里做运动,但是怕不安全,因为谁都可以靠近他家,在奋发图强后有了钱,住进了豪宅,为了运动安全就雇佣了保安,起初这个保安是只负责他家,拦截指Servlet的请求:/pigHome.com,随着时间变的久远,他家所在的这栋楼的很多邻居也觉得在家做运动的时候不安全,就和小猪说,能不能一起出钱再请一个,专门拦住楼下进来的闲杂人等,比如记者朋友,然后就用了拦截部分Servlet的请求: *.com,只要是身上有.com的业主都审查一下,再放行,别的没有的人,休想靠近这些个爱运动的群体,随着运动人数的增多和知名度的打响之后,整个社区的居民都觉得这招好使,但成本略高,毕竟没办法天天做运动所以就想要不在小区门口拦一下也行,这时候就拦截所有:/* 不管谁来,都拦一下,是小区的业主居民就放,不是就死都别想近,最后小猪发现,哇!到他家有 拦截所有保安>拦截部分保安>拦截指定servlet保安来保障自己的隐私和住宅,于是就开始开开心心的邀约其他喜欢做运动的朋友到家里一起做多人运动,因为足够安全
问题:
Servlet 的作用是针对浏览器发起的请求,进行请求的处理。通过 Servlet 技术我们可以灵活的进行请求的处理,但是我们不但要对请求记性处理,我们还需对服务器的资源进行统一的管理 ,比如请求编码格式的统一设置,资源的统一分配等等,这个时候该怎么办呢?
举个例子:
如果说长时间未登录没有了session 或者是盲猜知道了部分功能页面,这个时候对于服务器来说是非常危险的,所以在每次开启新的servlet的时候可以对session进行校验,看看请求是否合法
有个经典的用法是:
到了12点不能在使用网站功能
做权限管理校验:对用户的请求做过滤,过滤通过访问对应的url地址
这里就涉及到RBAC的知识,通俗的说,就是在数据库中设计一张表,表中存放着所有的servlet的url路径.用户登录后,根据UID查询到可以使用的URL存进对应的Session中,在使用中,和过滤器中的做比较,有就可以访问对应的servlet,没有就被拦截
解决:
使用过滤器。
作用:
对服务器资源进行管理校验请求的合法性
保护 servlet
使用:
Filter 接口
Filter 过滤器的配置
案例:
统一管理字符编码
Session 管理
一 创建一个普通java类并实现过滤器接口Filter。
二 需要在web.xml文件内进行配置类似servlet的配置。
<filter>
<filter-name>配置的过滤器名称</filter-name>
<filter-class>要配置的过滤器的全限定路径:包名.类名</filter-class>
</filter>
<filter-mapping>
<filter-name>配置的过滤器名称</filter-name>
<url-pattern>过滤器拦截请求地址的范围</url-pattern>
</filter-mapping>
示例:
<filter>
<filter-name>filter</filter-name>
<filter-class>com.lin.filter.WholeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
<!--/* 到服务器的请求都拦截-->
</filter-mapping>
技能点:
技能点一:过滤器之doFilter方法
作用:
doFilter方法是过滤器的核心方法,服务器在接收到浏览器发过来的请求后,先解析请求信息,创建对象request和response然后根据请求URL地址判断如果符合过滤器的过滤范围,则会调用过滤器中的doFilter 来进行请求拦截,并将request和response对象作为实参传递给doFilter方法。可以在doFilter方法中声明过滤器拦截代码。
服务器在接收到浏览器发过来的请求后,先解析请求信息,创建对象request和response
然后根据请求URL地址判断如果符合过滤器的过滤范围,则会调用过滤器中的doFilter来
进行请求拦截,并将request和response对象作为实参传递给doFilter方法。
我们可以在doFilter方法中声明过滤器拦截代码。
参数: