读书人

使用servlet过滤器后相对地址出有关问

发布时间: 2012-01-24 23:11:54 作者: rapoo

使用servlet过滤器后相对地址出问题了
为了系统安全性考虑。没登陆用户不能请求除登陆界面和处理登陆的Action之外的界面。
现在功能实现了。但是登陆解面的图片,样式了都不能用了。有人碰到过这种问题吗?
代码用的http://dev.yesky.com/329/2015829.shtml这个页面陈雄华的代码。修改成自己的代码是这样的。
public void doFilter(ServletRequest request, ServletResponse response
8.      , FilterChain filterChain)
9.  {
10.  try
11.  {
12.   //进行请求和响应的类型转换
13.   HttpServletRequest httpRequest = (HttpServletRequest) request;
14.   HttpServletResponse httpResponse = (HttpServletResponse) response;
15.
16.   boolean isValid = true;
17.   String uriStr = httpRequest.getRequestURI().toUpperCase();
18.   if (uriStr.indexOf( "INDEX.JSP ") == -1 &&
19.     uriStr.indexOf( "INDEX.DO ") == -1 &&
20.     httpRequest.getSession().getAttribute( "userid ") == null)
21.   {
22.    isValid = false;
23.   }
24.   if (isValid)
25.   {
26.    filterChain.doFilter(request, response);
27.   } else
28.   {
29.    httpResponse.sendRedirect( "/webModule/index.jsp ");
30.   }
31.
32.  } catch (ServletException sx)
33.  {
34.   filterConfig.getServletContext().log(sx.getMessage());
35.  } catch (IOException iox)
36.  {
37.   filterConfig.getServletContext().log(iox.getMessage());
38.  }


代码清单 过滤器的部署描述配置信息

1. <web-app>
2.  <display-name>webModule</display-name>
3.  <filter>
4.   <filter-name>logincheckfilter</filter-name>
5.   <filter-class>bookstore.servlet.LoginCheckFilter</filter-class>
6.  </filter>
7.  <filter-mapping>
8.   <filter-name>logincheckfilter</filter-name>
9.   <url-pattern>/*</url-pattern>
10.  </filter-mapping>
11.  …
12. </web-app>


还添一点问题描述。功能可用。登陆后再回到主页就一切问题都没了。就首次登的时候有问题。
我添了 <html:base/>
或者 <%path=...%> 那一长串代码
<base herf= <%=path%> > 也无效

[解决办法]
package com.zlt.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginFilter 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;
if( request.getRequestURI().indexOf( "manager ") > 0 ) //我的jsp一个文件夹
{
if(request.getSession().getAttribute( "name ")==null)
{
//response.setContentType( "text/html;charset=gbk ");
//PrintWriter out = response.getWriter();
//out.write( "\r\n ");


//out.write( "\t\t <script language=\ "javascript\ "> \r\n ");
//resquest.getRequestDispatcher( "/nologin.jsp ").forward(arg0, arg1);
//out.write( " \t\t alert(\ "您尚未登陆,请先登陆\ ");\r\n ");
//System.out.println(resquest.getSession().getServletContext().getRealPath( "/login.jsp "));
//out.write( " \t\t window.top.location= ' "+resquest.getSession().getServletContext().getResourcePaths( "/login.jsp ")+ " ';\r\n ");
//out.write( " \t\t\t </script> \r\n ");
//out.write( "\t\t\r\n ");
//out.write( "\r\n ");
response.sendRedirect(request.getContextPath()+ "/nologin.jsp ");
//out.flush();
//out.close();
}else
{
arg2.doFilter(arg0, arg1);
}
}
else if( request.getRequestURI().indexOf( ".do ") > 0 && !(request.getRequestURI().indexOf( "login.do ")> =0)&&!(request.getRequestURI().indexOf( "getLabelValue.do ")> =0))
{
if(request.getSession().getAttribute( "name ")==null)
{
//response.setContentType( "text/html;charset=gbk ");
//PrintWriter out = response.getWriter();
//out.write( "\r\n ");
//out.write( "\t\t <script language=\ "javascript\ "> \r\n ");
//out.write( " \t\t alert(\ "您尚未登陆,请先登陆\ ");\r\n ");
////out.write( " \t\t window.top.location= ' "+resquest.getSession().getServletContext().getResourcePaths( "/login.jsp ")+ " ';\r\n ");
//out.write( " \t\t\t </script> \r\n ");
//out.write( "\t\t\r\n ");
//out.write( "\r\n ");
//out.flush();
//out.close();
response.sendRedirect(request.getContextPath()+ "/nologin.jsp ");
//resquest.getRequestDispatcher( "/nologin.jsp ").forward(arg0, arg1);
}else
{
arg2.doFilter(arg0, arg1);
}
}else
{
arg2.doFilter(arg0, arg1);
}

}

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

}

}


这是我现在用的一模一样的代码

读书人网 >Java Web开发

热点推荐