2 u012161773 u012161773 于 2016.03.13 14:42 提问

新手求助:filter过滤器的问题

web.xml配置

<filter>
        <filter-name>loginInterceptor</filter-name>
        <filter-class>com.cbt.Interceptor.LoginInterceptor</filter-class>
        <init-param>
            <param-name>loginPage</param-name>
            <param-value>main_login</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>loginInterceptor</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>loginInterceptor</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>loginInterceptor</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>cbtconsole</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cbtconsole</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

springmvc配置

<bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 资源映射:因为servlet-mapping会拦截所有请求.需要过滤掉静态资源请求 -->
    <mvc:resources location="/WEB-INF/css/" mapping="/css/**" />
    <mvc:resources location="/WEB-INF/js/" mapping="/js/**" />

过滤器代码

@Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        String urlPath = httpServletRequest.getRequestURL().toString();
        String value = jedisClient.get("key1");
        System.out.println(urlPath+"---"+value);
        if (value !=null) {
            chain.doFilter(request, response);
        }else{
            httpServletResponse.sendRedirect(urlPath + loginPage);
        }
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        //context-param –> listener –> filter –> servlet
        loginPage = config.getInitParameter("loginPage");
        ServletContext context = config.getServletContext();
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
        jedisClient = (JedisClient) ctx.getBean("jedisClient");  
    }

输入localhost:8080进入过滤器后直接死循环了.
求大神指点

2个回答

u012161773
u012161773   2016.03.13 15:03
已采纳

是不是大神都不屑回答这种问题.小白真心求解答

qq_20039385
qq_20039385   2016.03.13 15:38
  应该是下面这句有问题,在不停的重定向。监控下value值。要是每次都为null的话定会死循环。 
    if (value !=null) {
            chain.doFilter(request, response);
        }else{
            httpServletResponse.sendRedirect(urlPath + loginPage);
        }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
过滤器Filter的写法及注意事项
在登陆模块的开发过程中,肯定要写过滤器这一功能,保证安全,其原理就是:当session中的用户丢失了就拦截相关操作,只有当session中的用户存在的时候,才可以顺利请求服务器进行相关操作。 过滤器的写法分为两步: 第一步:创建过滤器这个类,声明过滤条件,该类必须实现Filter,implement Filter(导包的时候不要导错了,是servlet中的),代码写法如下: 第二步:在w
过滤器、监听器、上下文、servlet线程安全问题
就像名字写那样,过滤器可以过滤请求,比如对一些评论进行过滤。又不改原有代码的基础上可以加上一个过滤器,或者是登陆验证。集中在一个过滤器中处理。写一个类实现接口 Filter 之后一定要在配置文件中配置!!!监听器可以监听,上下文的概念。过滤器:什么是过滤器: servlet规范当中定义的一种特殊的组件,用来拦截servlet容器的调用过程。 会先调过过滤器的方法,过滤器决定是否向后继续调用就是调
关于servlet中Filter过滤器解决页面乱码问题
标题 ##使用Filter过滤器解决页面乱码servlet中的Filter过滤器是一个挺好的东西,说实话, 前段时间写velocity的时候,输出中文时页面乱码 两种解决方法: 第一个,是在velocity的配置文件写好输入输出编码格式, 第二个,就是我选择的在web配置FiltercharsetFilter.java 首先需要实现Filter接口:public class charset
filter过滤器解决全局编码问题
java 源码文件 package cn.itheima.web.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain
fiddler过滤器的使用
域名过滤(1)勾选filter,输入想要过滤的域名 抓取到的请求显示如下: (2)二级域名的过滤,输入*.baidu.com的形式,所有在baidu.com域名下的所有请求都会被过滤出来 抓取到的请求显示如下: 进程过滤为了不和域名过滤器有所冲突,先把进程的过滤关闭。如下图,选择(1)No Host Filter 进程的过滤操作如下: (2)分辨浏览器和非浏览器的进程过滤 默认是全部,
解决浏览器缓存问题-过滤器方式
解决浏览器缓存问题-过滤器方式 一、浏览器缓存机制: 二、具体代码实现: a、xml部分: EmsCacheCleanFilter com.snt.crm.web.filter.EmsCacheCleanFilter EmsCacheCleanFilter /* b、filter过滤器部分: package com.snt.crm.web.filt
Servlet容器Filter的使用(Filter解决乱码问题实例)
这一切还要从乱码讲起....场景: 是这样子的,在做用户添加和修改模块的时候,做完了之后,在填写用户名的时候,如果我们输入中文的话,提交到数据库中, 发现数据库中的代码是乱码. 于是去网上查了查关于中英文乱码的事,怎么会提交到数据库中的汉字变成了乱码呢? 我们在这个jsp页面的开始明确给出了页面的编码格式:   GB18030代表的是汉字的编码的, 怎么会出现的乱码? 下面先解释一下 cha
Filter 失效问题
<br />某个项目中用filter 作权限过滤<br />部分 .do 过滤不了<br /> <br />经测试,发现是命名问题<br />例如: 第一个 Action 的名字为 UserAction<br />        第二个 Action 的名字为 UserInfoAction<br />        第三个 Action 的名字为 AddUserAction<br /> <br />这样命名就导致第二第三个action 过滤失效
利用过滤器来实现session超时,和权限管理
我们经常会碰到这样的情况,当我们有事情离开了一会,等再回来继续我们在网页中的操作时,会出现session超时的错误,然后跟上一堆的错误,让用户感觉很不爽,像这种情况如果能在一个错误页面给个Session超时的提示就会比较友好些,再一种情况,当一个系统中的用户角色有多个,有些页面对于一些级别低的用户来说是没有权限观看的,可能在页面上能根据不同的权限屏蔽了一些链接让低级别的用户无法进入,但是这只能让低
spring-boot 过滤器 filter
spring-boot 过滤器 filter spring-boot 过滤器 filter