底下我的filter,为什么我直接访问一个权限的页面时,总是不停地运行: System.out.println("被SignonFilter拦截一个未认证的请求");
输出“被SignonFilter拦截一个未认证的请求”
为什么hres.sendRedirect("login.jsp");这一句没有执行呢,页面始终没有跳转
public class SignonFilter implements Filter
{
String LOGIN_PAGE="login.jsp";
protected FilterConfig filterConfig;
//过滤处理的方法
public void doFilter(final ServletRequest req,final ServletResponse res,FilterChain chain)throws IOException,ServletException
{
HttpServletRequest hreq = (HttpServletRequest)req;
HttpServletResponse hres = (HttpServletResponse)res;
HttpSession session = hreq.getSession();
String isLogin="";
try
{
isLogin=(String)session.getAttribute("isLogin");
System.out.print(isLogin);
if(isLogin!=null&&isLogin.equals("true"))
{
System.out.println("在SignonFilter中验证通过");
//验证成功,继续处理
chain.doFilter(req,res);
}
else
{
//验证不成功,让用户登录。
hres.sendRedirect("login.jsp");
System.out.println("被SignonFilter拦截一个未认证的请求");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void setFilterConfig(final FilterConfig filterConfig)
{
this.filterConfig=filterConfig;
}
//销毁过滤器
public void destroy()
{
this.filterConfig=null;
}
/**
*初始化过滤器,和一般的Servlet一样,它也可以获得初始参数。
*/
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
}
输出“被SignonFilter拦截一个未认证的请求”
为什么hres.sendRedirect("login.jsp");这一句没有执行呢,页面始终没有跳转
public class SignonFilter implements Filter
{
String LOGIN_PAGE="login.jsp";
protected FilterConfig filterConfig;
//过滤处理的方法
public void doFilter(final ServletRequest req,final ServletResponse res,FilterChain chain)throws IOException,ServletException
{
HttpServletRequest hreq = (HttpServletRequest)req;
HttpServletResponse hres = (HttpServletResponse)res;
HttpSession session = hreq.getSession();
String isLogin="";
try
{
isLogin=(String)session.getAttribute("isLogin");
System.out.print(isLogin);
if(isLogin!=null&&isLogin.equals("true"))
{
System.out.println("在SignonFilter中验证通过");
//验证成功,继续处理
chain.doFilter(req,res);
}
else
{
//验证不成功,让用户登录。
hres.sendRedirect("login.jsp");
System.out.println("被SignonFilter拦截一个未认证的请求");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void setFilterConfig(final FilterConfig filterConfig)
{
this.filterConfig=filterConfig;
}
//销毁过滤器
public void destroy()
{
this.filterConfig=null;
}
/**
*初始化过滤器,和一般的Servlet一样,它也可以获得初始参数。
*/
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
}
如果是全局的,那么当你进入“login.jsp”中的时候同样会进入该过滤器,因此陷入死循环了。
JSP过滤吗?
<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4"> <display-name>Welcome to Tomcat</display-name>
<description>
JSP应用开发详解
</description>
<filter>
<filter-name>auth</filter-name>
<filter-class>com.jspdev.ch8.SignonFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>auth</filter-name>
<url-pattern>/security/*</url-pattern>
</filter-mapping>
</web-app>
这个应该不是全局吧
login.jsp,login_signon.jsp文件
security目录下有index.jsp
还有一个问题就是:
我在浏览器里直接输入http://127.0.0.1:8080/test/security/index.jsp时出现
java.lang.NullPointerException异常不能运行下去,是不是由于(String)session.getAttribute("isLogin");
返回null的原因呀,可这个filter不就是用来防止直接访问限制页面吗?
java.lang.NullPointerException异常不能运行下去,这个是不是由于这个时候session还没有创建呀,那我要防止直接在浏览器里面访问某个网页怎么用filter呀,
放的地方不对。