1. filter过滤器配置如何不过滤一些页面
直接添加多个文件映射啊,为每个需要进行过滤的文件都写个映射标签
2. java过滤器怎么不过滤一个页面里包含的多个请求
abstract public class FilterPerRequest implements Filter {
private static final Boolean FILTERED = true;
private ThreadLocal<Boolean> statusLocal = new ThreadLocal<Boolean>();
@Override
final public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
if (hasNotFiltering()) {
doFilterAndDispatchRequest(req, resp, chain);
return;
}
//dispatch request only
chain.doFilter(req, resp);
}
private boolean hasNotFiltering() {
Boolean status = statusLocal.get();
if (status == null) {
return true;
}
return false;
}
private void doFilterAndDispatchRequest(ServletRequest req,
ServletResponse resp, FilterChain chain) throws IOException,
ServletException {
try {
doFilterPerRequest(req, resp);
setFiltered();
chain.doFilter(req, resp);
} finally {
cleanFilterStatus();
}
}
abstract protected void doFilterPerRequest(ServletRequest req,
ServletResponse resp);
private void setFiltered() {
statusLocal.set(FILTERED);
}
private void cleanFilterStatus() {
statusLocal.set(null);
}
}
那要就情况而定了。。。
如果是request范围内的话,就可以使用上面的过滤器。
如果是session范围内的话,就需要在session内存储一个标志变量,方式和request差不多。
如果是限制用户操作的话,那就必须将用户操作持久化。
由于你的问题不明确,我也不好多说...
3. 为何java中的过滤器filter不起作用
过滤器配置正抄确,但却没有起到过滤作用,原因可能是排放位置的问题。如下:
错误:
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.yiwo.base.web.filter.PrepareFilter</filter-class>
</filter>
<filter>
<filter-name>userFilter</filter-name>
<filter-class>com.yiwo.base.web.filter.UserFilter</filter-class>
</filter>
4. 如何用java过滤器是不要把login.jsp页面也过滤掉
|public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest) request;
String uri = hrequest.getRequestURI();得到请求地址
String file[] = uri.split("/");通过/分隔,这样,数组的最后一个值,就是页面,
你比较下file[file.lenght-1].equals("login.jsp")就可以了。版
if(file[file.lenght-1].equals("login.jsp"||)){}要解除某页权面的过滤,用||在if里面添加就可以
chain.doFilter(request, response);
}
为了让层次跟清晰一点,最好还是分文件夹。
5. java添加过滤器验证登录后无法跳转到登录界面
改成request.getRequestDispatcher("/login.jsp").forward(request, response);
6. java web项目里面的加了过滤器,在自己电脑上面测试项目的时候就打不开网页了,怎么回事
这是我自己写过的一个登陆过滤器
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("=============LoginFilter============");
//将父类转成子类
HttpServletRequest request=(HttpServletRequest) req;
//javaweb_T7/LoginServlet
String uri=request.getRequestURI();
//控制登录的
HttpSession session=request.getSession();
String userName=(String) session.getAttribute("userName");
//如果没有登录就跳转
//要么你session中有东西(已经登录) ,要么你是登录的动作
if(userName!=null || uri.indexOf("LoginServlet")!=-1){
//如果登录过,就不阻拦
chain.doFilter(req, res);
}else{
request.setAttribute("msg", "请先登录后操作");
request.getRequestDispatcher("login.jsp")
.forward(request, res);
}
}
7. 请教Java Filter过滤器中页面的跳转问题
filter只能对请求进行过滤处理,并不能直接跳转某个页面。servlet才能跳转页面的吧。
8. Java:现在Filter把所有请求都拦截了,怎么使Filter不过滤login.jsp页面呢
对于这种,抄我说两种方法:
1、将你所有的JSP页面单独放在一个文件夹里(假如jspPage),jspPage文件夹里可根据类别分若干子文件夹,再把相对应的JSP放在子文件夹里;
JS、CSS及图片等分别放在外面的文件夹里(与文件夹jspPage并列)
再:<url-pattern>/jspPage/*</url-pattern>就行了
一般用的就是这种
2、在过滤的JAVA文件中,在doFilter方法里进行判断,将后缀名为.css、.js等直接设置为通过就行了,这种较为复杂,在一些特殊情况下才用到,一般不
9. java过滤器不过滤某个货某一些路径
首先在web.xml 配置 参数
<param-name>noLoginPaths</param-name> 参数名可自取
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.imooc.filter.LoginFilter</filter-class>
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>login.jsp;fail.jsp;LoginServlet</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后在 Filter 中,创建一个FilterConfig 的引用, 这个引用在init中初始化,并且能够通过它获取<init-param>中的key和value ,
StringnoLoginPaths=config.getInitParameter("noLoginPaths");
然后通过判断用户请求的url 是否符合 noLoginPaths 中设置的不过滤选项,如果如何,就调用do.filter放行
关键代码 :
if(noLoginPaths!=null){
String[]strArray=noLoginPaths.split(";");
for(inti=0;i<strArray.length;i++){
if(strArray[i]==null||"".equals(strArray[i]))continue;
if(request.getRequestURI().indexOf(strArray[i])!=-1){
arg2.doFilter(arg0,arg1);
return;
}
}
}
完整代码:
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
{
privateFilterConfigconfig;
@Override
publicvoiddestroy(){
}
@Override
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)arg0;
HttpServletResponseresponse=(HttpServletResponse)arg1;
HttpSessionsession=request.getSession();
StringnoLoginPaths=config.getInitParameter("noLoginPaths");
Stringcharset=config.getInitParameter("charset");
if(charset==null){
charset="UTF-8";
}
request.setCharacterEncoding(charset);
if(noLoginPaths!=null){
String[]strArray=noLoginPaths.split(";");
for(inti=0;i<strArray.length;i++){
if(strArray[i]==null||"".equals(strArray[i]))continue;
if(request.getRequestURI().indexOf(strArray[i])!=-1){
arg2.doFilter(arg0,arg1);
return;
}
}
}
if(session.getAttribute("username")!=null){
arg2.doFilter(arg0,arg1);
}else{
response.sendRedirect("login.jsp");
}
}
@Override
publicvoidinit(FilterConfigarg0)throwsServletException{
config=arg0;
}
}