过滤器问题

-伊凡- 2009-12-26 10:28:40
我已经写好了一个过滤器(老师写的),目的是为了防止跳过登录操作,直接输入某个具体的地址,直接打开相应的页面。XML文件也部署好了,请问还需要在JSP页面上写上调用过滤器的什么代码之类的吗?如果写的话怎么写呢?因为我不知道,照着做了也没有实现这个过滤器的功能(就是说没登陆就直接输入地址也能进入到相应的页面,所以没实现)。请大家帮我看看

过滤器JAVA文件:
//AdminEnterCheck.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AdminEnterCheck implements Filter
{
private FilterConfig fc=null;
public void init(FilterConfig fc) throws ServletException
{
this.fc=fc;
}
public void doFilter (ServletRequest servletrequest,ServletResponse servletresponse,FilterChain chain) throws IOException,ServletException
{
if (fc==null)
{
return;
}
HttpServletRequest request=(HttpServletRequest)servletrequest;
HttpServletResponse response=(HttpServletResponse)servletresponse;
HttpSession session=request.getSession();
String username=(String)session.getAttribute("username");
if (username==null || username.equals(""))
{
response.sendRedirect("../index.jsp");
}else
{
chain.doFilter(servletrequest,servletresponse);
}
}
public void destroy()
{
fc=null;
}
}

web.xml文件如下:
<web-app>

<filter>
<filter-name>abc</filter-name>
<filter-class>AdminEnterCheck</filter-class>
</filter>

<filter-mapping>
<filter-name>abc</filter-name>
<url-pattern>/Myex12/*url-pattern>
</filter-mapping>

</web-app>
...全文
142 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
吴佳峻 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kaiyanghao123 的回复:]
G:\tomcat-6.0.18\webapps\Myex12  这个是我放的目录。WEB-INF与jsp页面都是放在Myex12下的。请大家看下是否有错?
[/Quote]
汗,看到这才知道Myex12不是一个目录,是一个项目名,在配置映射时"/"代表根目录,也就是项目名。你写的是
"/Myex12/*",当然过滤不了了,应该为"/*",或有文件夹,就写文件夹的名,具体过滤映射好像
有三种用法,你可以上网搜搜。
liuc0317 2009-12-27
  • 打赏
  • 举报
回复
<url-pattern>/Myex12/*url-pattern> 这样写不对!最后一个没有 '<'
需要进得过滤一下!不然的话没有登陆的也可以进了!
吴佳峻 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kaiyanghao123 的回复:]
<url-pattern>/Myex12/* </url-pattern>这个我写对了,我上面贴出来的少了“ </”!Myex12 是我的工程目录 !
[/Quote]
Myex12是工程里面的文件夹是吧,你xml里面配置的格式是对的。
你写一个最简单的过滤器试试,

import java.io.IOExcep

public class AdminFilter implements Filter {

public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
HttpSession session=request.getSession();
Object m=session.getAttribute("member");
if(null==m){
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else{
arg2.doFilter(arg0, arg1) ;
}

}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}


-伊凡- 2009-12-27
  • 打赏
  • 举报
回复
我又试了一下,改成过滤的只是一个JSP页面,结果成功了!
-伊凡- 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 crazylaa 的回复:]
引用 16 楼 kaiyanghao123 的回复:
引用 14 楼 yunhayuna 的回复:
xml文件里直接 用/*  不要加工程名式一下

我照着做了,可以过滤,不过怎么全部都过滤了?就是我点击登录也没反应,怎么回事啊?

/*代表所有项目的所有url,全部过虑。既然这样可以,说明你这里的路径有问题,看看
[/Quote]
我的路径有问题?我的路径以及写在上面了,大家帮忙看下,谢谢
crazylaa 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 kaiyanghao123 的回复:]
引用 14 楼 yunhayuna 的回复:
xml文件里直接 用/*  不要加工程名式一下

我照着做了,可以过滤,不过怎么全部都过滤了?就是我点击登录也没反应,怎么回事啊?
[/Quote]
/*代表所有项目的所有url,全部过虑。既然这样可以,说明你这里的路径有问题,看看
crazylaa 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kaiyanghao123 的回复:]
AdminEnterCheck这个类 没有包的。就是没有被过滤到啊
[/Quote]
不晓得哦,在里面System.out.println一下看看。。
-伊凡- 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yunhayuna 的回复:]
xml文件里直接 用/*  不要加工程名式一下
[/Quote]
我照着做了,可以过滤,不过怎么全部都过滤了?就是我点击登录也没反应,怎么回事啊?
-伊凡- 2009-12-27
  • 打赏
  • 举报
回复
G:\tomcat-6.0.18\webapps\Myex12 这个是我放的目录。WEB-INF与jsp页面都是放在Myex12下的。请大家看下是否有错?
yunhayuna 2009-12-27
  • 打赏
  • 举报
回复
xml文件里直接 用/* 不要加工程名式一下
-伊凡- 2009-12-27
  • 打赏
  • 举报
回复
8楼的谢谢了,不过我试了一下你的java程序,可是编译出错,于是我改成:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class AdminFilter implements Filter {

public void destroy() {


}

public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
HttpSession session=request.getSession();
Object m=session.getAttribute("username");
if(null==m){
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else{
arg2.doFilter(arg0, arg1) ;
}

}

public void init(FilterConfig arg0) throws ServletException {


}

}

编译通过了!可是试了,还是没有达到过滤器的效果!
-伊凡- 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tzsword 的回复:]
引用 6 楼 kaiyanghao123 的回复:
AdminEnterCheck这个类 没有包的。就是没有被过滤到啊

没包名你怎么调用?
[/Quote]
我的class文件是直接放在WEB-INF文件夹下面的,没有设置包名的文件夹,所有说没有包。因为JAVA文件我也没有用到包啊!
jiahardstudy 2009-12-27
  • 打赏
  • 举报
回复
在JSP页面上不需要在写什么,因为Tomcat启动时已经运行了过滤器,
<filter-mapping>
<filter-name>abc </filter-name>
<url-pattern>/*<url-pattern>
</filter-mapping>
你这样写看可以不,配置时url一定要正确
TzSword 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kaiyanghao123 的回复:]
AdminEnterCheck这个类 没有包的。就是没有被过滤到啊
[/Quote]
没包名你怎么调用?
-伊凡- 2009-12-26
  • 打赏
  • 举报
回复
AdminEnterCheck这个类 没有包的。就是没有被过滤到啊
-伊凡- 2009-12-26
  • 打赏
  • 举报
回复
<url-pattern>/Myex12/*</url-pattern>这个我写对了,我上面贴出来的少了“</”!Myex12 是我的工程目录 !
zl3450341 2009-12-26
  • 打赏
  • 举报
回复
<url-pattern>/Myex12/*url-pattern>
路径写正确没
crazylaa 2009-12-26
  • 打赏
  • 举报
回复
<url-pattern>/Myex12/*url-pattern>

Myex12是你的工程名不?不是就改为工程名
TzSword 2009-12-26
  • 打赏
  • 举报
回复
按照你的配置文件来看
只有你的请求为/Myex12/XX.jsp才被这个拦截器拦截的。。。
把你的xx.jsp文件放在Myex12(webroot下面的一个建一个文件夹)下面试试
xinlan1022 2009-12-26
  • 打赏
  • 举报
回复
AdminEnterCheck这个类有包吗?这里要写全路径,还有你配的<url-pattern>/Myex12/*url-pattern>和你访问的页面都被过滤到了吗?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧