_huang_ 2015-07-28 02:16 采纳率: 50%
浏览 1770
已采纳

web jsp filter 权限控制 运行测试出现500问题 怎么解决

工程结构
图片说明

index.jsp为登陆页面,UserServlet.java为针对登陆的servlet,登陆成功或失败都会跳转到show.jsp,但是有Userfilter.java的过滤。一旦登陆失败会让页面转到error.jsp。

正常是流程:进入index.jsp输入账号密码,登陆成功后进入show.jsp(测试过没问题)
错误的用例:通过控制url绕过index.jsp直接进入show.jsp(出现500错误,应该要进入error.jsp的)

如图
图片说明

XML配置文件
图片说明

index.jsp



用户登陆
用户名:

密码:



UserServlet.java
public class UserServlet extends HttpServlet
{

public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException,IOException
{
     String name=req.getParameter("username");
     String password=req.getParameter("password");
     UserInfo info= new UserInfo();

         if(password.equals("123456"))
         {
             info.setName(name);
             info.setPassword(password);
             req.getSession().setAttribute("name", name);
             req.getSession().setAttribute("userinfo", info);
             System.out.println("登陆成功");
             RequestDispatcher rd=req.getRequestDispatcher("/hehe/show.jsp");
             rd.forward(req, resp);
         }
         else
         {
             System.out.println("登录失败");
             RequestDispatcher rd=req.getRequestDispatcher("/hehe/show.jsp");
             rd.forward(req, resp);
         }  
}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException
{
        doGet(request,response);
}

}

UserFilter.java
public class UserFilter implements Filter{
//销毁方法
public void destroy() {

 }
 //完成过滤操作
 public void doFilter(ServletRequest request, ServletResponse response,FilterChain filter) throws IOException, ServletException 
 {
  UserInfo info=(UserInfo)((HttpServletRequest) request).getSession().getAttribute("userinfo");

  String name=((HttpServletRequest) request).getSession().getAttribute("name").toString();
  System.out.println("filter 2:"+name);

  if(info!=null)
  //if(name!=null)
  {
   filter.doFilter(request, response);
  }
  else
  {
   response.setContentType("text/html;charset=utf-8");
   ((HttpServletResponse) response).sendRedirect("../error.jsp");
  }

 }
 //初始化
 public void init(FilterConfig arg0) throws ServletException {

 }

}

  • 写回答

2条回答 默认 最新

  • 苏遵守 2015-07-28 06:37
    关注

    直接访问show.jsp的话 session为空啊,当然不行,你还要判断session是否为空,然后再处理跳转,可以写在过滤器里面, 也可以写在show.jsp里面

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机