jsp过滤器

来源:互联网 发布:淘宝网新款连衣裙 编辑:程序博客网 时间:2024/05/18 01:20

在基于 JSP 页面系统设计开发中,经常有一批页面需要对用户的身份进行验证,只有合法的用户才可以访问这些页面。显然可以在每个页面中添加身份验证,但这样做会给编程造成很大的麻烦,而且增加多余的代码。那么,如何解决JSP 页面用户身份验证呢?

二、JSP 页面中用户身份验证分析  在有多个用户使用的 JSP 系统中,为了保障系统的隐秘性安全性,就需要对登录系统的用户进行身份验证以保证用户身份的合法性。一个用户首次登录系统后会在 session 对象中留下它的标识 [1],就可以利用这个标识来完成各个 JSP页面的用户身份验证。为了避免每个页面都进行身份验证而出现的麻烦,这里将通过 Servlet 过滤器对 JSP 页面统一进行身份验证。 

 三、用户身份验证的设计思路和技术要点

1、设计思路  Servlet 过滤器验证用户是围绕 session 对象进行的。首先是实现用户登录的功能,在用户登录成功后产生一个session 标识;然后创建 Servlet 过滤器,判断标识值是否正确,如果正确则通过验证,否则将给出提示信息并跳转到用户登录页面。

2、技术要点  使用 Servlet 过滤器实现 JSP 页面中用户身份验证,首先必须实现 Filter 接口,且重写 doFilter() 方法,由doFilter() 方法去处理过滤业务;其次,在 web.xml 文件中配置 Servlet 过滤器,指定过滤器的名称、过滤器包所在类的名称及过滤器的映射范围等 [2]。

四、JSP 页面中用户身份验证的实现

1、用户身份合法性确认  为了能够使用 Servlet 过滤器实现用户对 JSP 页面访问的合法性验证,首先需要根据用户登录号和密码等与数据库中的信息相比较,若能匹配成功,则是用户登录成功,就用 session 对象存储该用户的标识;然后再由 Servlet 过滤器实现对用户访问的各个页面的过滤。存储用户登录成功的session 标识的核心代码为:session.setAttribute("user", 用户登录号 )。

2、Servlet 过滤器的实现  用 Servlet 过滤器实现用户身份验证的关键代码如下:

package hzu.util.filters; 

 public class UserFilter extends HttpServlet implements Filter {

private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException{

 this.filterConfig=filterConfig; }[NextPage]  public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws ServletException,IOException{

HttpSession session=((HttpServletRequest) request).getSession(); 

 if(session.getAttribute(“user”)= =null){

 PrintWriter out=response.getWriter(); 

out.print(“<script language=javascript>alert(„您还没登录 , 请登录!!‟);javascript:location=‟系统登录的主页面 ';</script>");

out.flush(); out.close();

 } else{

  chain.doFilter(request, response);

 } } } 

 3、在 web.xml 中配置 Servlet 过滤器  在编写完Servlet过滤器后,要在web.xml文件中配置过滤器。也就是通过<filter></filter>标签指定Servlet过滤器的名称、过滤器包所在类的名称,通过<filter-mapping></filter-mapping>标签配置 Servlet 过滤器的映射路径 [3]。其关键代码如下:

<filter> 

 <filter-name>UserLoginFilter</filter-name>

<filter-class>hzu. util.filters.UserFilter</ filter-class>

 </filter>

<filter-mapping>

  <filter-name>UserLoginFilter</filter-name>

<url-pattern>[/ 目录名 ]/*</url-pattern>

<dispatcher>request</dispatcher>

 <dispatcher>forward</dispatcher>

<dispatcher>include</dispatcher>

</filter-mapping>