我的过滤器哪里写错了?

kien5 2009-09-23 02:27:16

<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>
tools.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>




public class SetCharacterEncodingFilter implements Filter {

protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable;

public SetCharacterEncodingFilter() {
encodingName = "UTF-8";
enable = false;
}

// 初始化
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}

// 每个请求设置UTF-8
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");

HttpServletRequest httprequest = (HttpServletRequest) request;
HttpServletResponse httpresponse = (HttpServletResponse) response;
HttpSession session = httprequest.getSession();
AdminUser user=new AdminUser();
try { //获得在session中所记录的isLogin属性,该属性由登录部分的代码写入
user = (ActingAdminUser) session.getAttribute("user");
if (user!=null) //验证成功,继续处理
{
chain.doFilter(request, response);
} else //验证不成功,让用户登录。
{
String targetURL = httprequest.getContextPath()+"/login.jsp";
httpresponse.sendRedirect(targetURL);
}
} catch (Exception e) {
e.printStackTrace();
}

}
public void destroy() {
}
}



我想实现判断session用户是否登录了
我配了这个,是在编码过滤器那里顺便加点session判断,但是我开个网页都卡在那里,好像在反复重定向,左下角闪烁正在打开"http://localhost:8080/test/login.jsp" 和 "正在重新定向到http://localhost:8080/test/login.jsp" 我写错哪里了?
...全文
169 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenghuiss 2009-09-23
  • 打赏
  • 举报
回复
你直接new 了一个AdminUser对象出来
所以下面if(user!=null)不进入,直接重定向了 重定向后又继续
被拦截请求 所以再循环,循环成死循环
farfromcross 2009-09-23
  • 打赏
  • 举报
回复
进入死循环了,我们看一下:

第一次请求 login.jsp,因为结尾是“jsp”,所以要先进入filter;
因为目前还没登陆,即user==null,那么根据你程序的逻辑,会跳转到login.jsp

这样就成了死循环。

login.jsp应为被排除在过滤器过滤的url之外。
adaikiss 2009-09-23
  • 打赏
  • 举报
回复
你的编码过滤是针对所有页面的,而权限过滤是针对需要登陆的页面的,显然不写在一起才合理!
adaikiss 2009-09-23
  • 打赏
  • 举报
回复
1你一开始访问login.jsp是想登陆,
2但是过滤器给拦下来了
3查看session里没有user
4就转到login.jsp页面也就是回到1
sunnylyy 2009-09-23
  • 打赏
  • 举报
回复
if (user!=null || request.getServletPath().startsWith("/login.jsp")
|| request.getServletPath().startsWith("/login.action"))
{
chain.doFilter(request, response);
}

"login.action"改成你点登陆之后进行处理的jsp/action
kien5 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sunnylyy 的回复:]
if (user!=null || request.getServletPath().startsWith("/login.jsp"))
{
  chain.doFilter(request, response);
}
[/Quote]

连登陆都不得了,点了登陆按钮就跳会login.jsp,action都不进了
kien5 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huahua2000 的回复:]
<filter-mapping>
        <filter-name>SetCharacterEncodingFilter </filter-name>
        <url-pattern>*.jsp </url-pattern>         
    </filter-mapping>

    <filter-mapping>
        <filter-name>SetCharacterEncodingFilter </filter-name>
        <url-pattern>*.do </url-pattern>
    </filter-mapping>
---------------------------------------------------
改成
  <filter-mapping>
        <filter-name>SetCharacterEncodingFilter </filter-name>
        <url-pattern>/* </url-pattern>
    </filter-mapping>


[/Quote]

还是反复重定向
buqi001 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huahua2000 的回复:]
<filter-mapping>
        <filter-name>SetCharacterEncodingFilter </filter-name>
        <url-pattern>*.jsp </url-pattern>         
    </filter-mapping>

    <filter-mapping>
        <filter-name>SetCharacterEncodingFilter </filter-name>
        <url-pattern>*.do </url-pattern>
    </filter-mapping>
---------------------------------------------------
改成
  <filter-mapping>
        <filter-name>SetCharacterEncodingFilter </filter-name>
        <url-pattern>/* </url-pattern>
    </filter-mapping>


[/Quote]
这样应该就行了
sunnylyy 2009-09-23
  • 打赏
  • 举报
回复
if (user!=null || request.getServletPath().startsWith("/login.jsp"))
{
chain.doFilter(request, response);
}
yukang_ky 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 adaikiss 的回复:]
死循环?访问登陆页面,给转到登陆页面,如此反复?
重写个filter改为只过滤需要登陆的页面
[/Quote]

死循环了
日月小小 2009-09-23
  • 打赏
  • 举报
回复
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
---------------------------------------------------
改成
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

adaikiss 2009-09-23
  • 打赏
  • 举报
回复
死循环?访问登陆页面,给转到登陆页面,如此反复?
重写个filter改为只过滤需要登陆的页面

81,091

社区成员

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

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