如何在JSP中实现过滤器?

来源:互联网 发布:冷藏车运输的优化 编辑:程序博客网 时间:2024/06/02 13:25

有一个java web项目, 用户登录信息存放在session中, 以"user"为key存放(如果"user"对应的值为空, 则说明用户没有登录), 要求只有登录的用户才能访问manager目录下的服务(manager/*.htm), 请写出大体思路, 并实现关键部分的代码

本题,我认为应该用过滤器,是最好的,1.访问manager目录下的服务(manager/*.htm),由于,此目录下都是静态文件,没法在html文件里写入java代码,对Session作校验,2.如果写成一个Servlet,配置映射路径为 manager/*,虽然能对以此结尾的URl作在Servlet里做校验,但无法跳转到指定的html文件,例如:manager/test1.html,此时,不会是直接访问该静态文件,而是又是映射到Servlet中,以此循环,无法实现访问静态文件。由于有这些性质,所以只能用过滤器方式来实现这种功能。过程:先实现一个过滤器,包括配置及处理类,映射路径写成manager/*,因此只要出现此映射结尾的,都会转到处理类上,并对Session用校验,未登陆的,才跳转到用户登陆页面index.jsp,成功登陆的,直接跳转到url指定的路径上。

目录结构如下:||--index.jsp (登陆页面)||---WEB-INF||--web.xml (添加过滤器配置 )|--manager| |||---test1.html||---test2.html|src——MyFilter.java( implements Filter) (过滤器处理类)

  

关键代码: 1.web.xml (配置过滤器)

...  <filter>    <filter-name>MyFilter</filter-name>    <filter-class>com.temp.MyFilter</filter-class>  </filter>    <filter-mapping>    <filter-name>MyFilter</filter-name>    <url-pattern>/manager/*</url-pattern>   </filter-mapping>...

2.MyFilter.java(过滤器处理类)

...//实现接口Filter的doFilter(..)方法public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest hreq = (HttpServletRequest)request;HttpServletResponse hres = (HttpServletResponse)response;String user = request.getParameter("user");String pwd = request.getParameter("pwd");//用户登陆if(user!=null&&pwd!=null&&user.equals("admin")&&pwd.equals("admin")){hreq.getSession().setAttribute("user", "1");}//获取SessionString flag  = (String)hreq.getSession().getAttribute("user");if(flag==null){//重新登陆hres.sendRedirect("/myproject/index.jsp");}else{//跳转到指定的html文件chain.doFilter(hreq, hres);}}...
原创粉丝点击