做了个简单权限控制的filter
代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)throws IOException, ServletException {

  HttpServletRequest req=(HttpServletRequest)request;
  HttpServletResponse rep=(HttpServletResponse)response;
User u=(User)req.getSession(false).getAttribute("user");
if( u.getRole().equals("2")==false){
rep.setCharacterEncoding("utf-8");
rep.setContentType("text/html;charset=utf-8"); 
rep.getWriter().print("您没有权限访问!");
rep.sendRedirect(req.getContextPath()+"/login.jsp");//转发到登录页面
}
测试的结果是可以转发到登录页面,可是rep.getWriter().print("您没有权限访问!")这段代码去失效了,页面没有弹出相应的对话框,应该怎么弄?

解决方案 »

  1.   

    rep.sendRedirect(req.getContextPath()+"/login.jsp");//转发到登录页面
    是外部跳转,信息应该不会带过去。
    用res.getRequestDisp...试试
      

  2.   

    你那个写法就不是弹出对话框的写法。
    你应该写个js。然后把你要输出的内容alert出来。
      

  3.   

    问题不会解决,不过楼主!标红加粗的地方,equals前后对象参数互换一下位置,请你再仔细看看equals方法
      

  4.   

    rep.getWriter().print("<script > 您没有权限访问! </script>"); 
    就可以弹出来了。
      

  5.   

    楼上不介意我丢个砖头了,粗心大意啊,嘿嘿
    即使alert出来,不知道会不会还没点击确定就转发了呢
      

  6.   

    User u=(User)req.getSession(false).getAttribute("user"); 
    是这段吧!
    是不是应该这么写
    if((User)req.getSession(false).getAttribute("user")!=null){
    /////
    }
      

  7.   

    if( u.getRole().equals("2")==false){ 
    后面为何还要加个 ==false  ?
      

  8.   

    楼主,快跑,再这样下去,估计有人会指着User u;
    说你的u怎么这样起名啊,不规范啊
      

  9.   

    呵呵!我这是学习的,没有商业用途,后来想想还是弄个出错页面比较方便,现在代码改成这样了,还有什么缺点大家指点一下,
    private User user;
     public void init(FilterConfig filterConfig) throws ServletException {

        }
     
     public void destroy() {
        }

      public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)throws IOException, ServletException {

      HttpServletRequest req=(HttpServletRequest)request;
      HttpServletResponse rep=(HttpServletResponse)response;
      if(req.getSession(false).getAttribute("user")==null)
      rep.sendRedirect(req.getContextPath()+"/rolerror.jsp");
      
      else {
      user=(User)req.getSession(false).getAttribute("user"); 
                if("2".equals(user.getRole()))
                 rep.sendRedirect(req.getContextPath()+"/rolerror.jsp");
                     else chain.doFilter(request, response);
      }
      

  10.   


    如果有人指出来,我觉得楼主应该高兴才对!我们就是要做专业的程序员!代码编写就要写得严谨点。楼主,说你会出现空指针,是因为那个null不存在equals方法,你在外面加了那段判空代码就对了。不过最最好的写法是把 2 写在前面,“2”.equals(...),因为你不这样写的话,程序可能会出现异常,你前面的还是null,是null的话,程序肯定报错。不知明白没
      

  11.   

    的确,做一个优秀的程序员是很难得,我现在也是朝这个目标奋斗。要明白一点,学好是要吃不少苦头的,做好准备。还有就是注意方法,多做做学习总结。我也刚出来半年,以前也不是学Java的,web都没怎么学