hell118232 2009-11-01 11:57
浏览 280
已采纳

权限问题!

public class userfiter implements Filter{
String noFilterURL="";
public void destroy() { }

public void init(FilterConfig arg0) throws ServletException 
        {
      noFilterURL=arg0.getInitParameter("noFilter");
    }

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chai) throws IOException, ServletException              {
    HttpServletRequest request=(HttpServletRequest)req;
    String tmpstr=request.getRequestURI().substring(request.getRequestURI().indexOf("/")+1);
    String uri=tmpstr.substring(tmpstr.indexOf("/"));
    if(noFilterURL.indexOf(uri)<0)
        {     HttpSession session=null;
             session=request.getSession();
               if((session.getAttribute("login"))==null)
                     {  
                         request.setAttribute("error","请先登录");
                         RequestDispatcher dis=req.getRequestDispatcher("/login.jsp");
                         dis.forward(req, res);
                         return;
                   }


       }   

       chai.doFilter( req, res);

     }

}


UserFilter
com.web.userfiter

noFilter
/login.jsp,/login.do,/images/login_background.gif,
/images/login.jpg,/images/login.bmp-

   </init-param>
 </filter>
 <filter-mapping>

   <filter-name>UserFilter</filter-name>
   <url-pattern>/*</url-pattern>

这是我写的过滤器,和web.xml的配置文件。但是这没达到我想要的效果,例如我在IE里面http://localhost:8089/OA/login.do,可以提交,但如果把login.do也过滤掉,那就不能登录了!但又不想让直接在IE里面输入http://localhost:8089/OA/login.do提交!还有如果是http://localhost:8089/OA/massge/index.jsp,它是不能登录,可以跳转到http://localhost:8089/OA/login.jsp,但是图片又不显示出来,如果.do提交,返回到http://localhost:8089/OA/login.jsp页面,图片又可能显示出来!
我想的效果是无论从什么方式提交,只要没登录,都要返回到login.jsp页面!当然图片也要显示出来!就是权限问题,没登录,无论你什么方式提交也不能访问其它页面,在怎么做呢?如果用Action做,那.jsp页面就不能过滤掉了,能访问到静态的页面!
要怎么做呢?请帮忙看看!谢谢!给我点意见咯!谢谢...感激不尽!

  • 写回答

1条回答

  • Ryankay 2009-11-02 17:14
    关注

    楼主看来还处在研究学习阶段。

    由于你写的东西太乱我努力尝试去看但还是很难理解你想表达的意思。但关于权限问题我可以把我的经验分享一下。

    首先,你采用filter的方式是正确的,这里的关键在于
    [code="java"]
    UserFilter
    /*

    [/code]

    这里不要/*。如果对所有都过滤那就相当于没有过滤,通常,我们实现权限功能是通过路径来实现的。比如:/admin/admin.do,这是一个后台的action的path,显然,要访问这个action需要提前登录,所以我们写一个AdminFilter,然后
    AdminFilter
    /admin/*

    [/code]
    那么对于action以外的资源我们可能也想要保护,需要登录后才能访问,比如图片,其他文件等。那么我们可以再web根目录下建立一个admin的文件夹,显然,当工程发布之后,要访问admin下的所有资源,我们的路径会是http://localhost:8080/admin/xxx

    xxx可以使xxx.jpg,xxx.css。这样我们就实现了一致性,通过建立文件夹和配置action的path。

    需要注意的是,我们登录的action的路径就不能设置我/admin/下了,需要放到最外面,比如admin.do。这样就不会造成死循环,因为访问登录action肯定是不需要登录的,【我本来就是来这里登陆的】,当然你的admin.jsp也不能放到admin/下,admin.jsp所用到的css\js等文件通通不能放到admin文件夹下,不然访问不到。

    好了,这就是一个简单的权限系统,当然,也可以进一步细化,对后缀名进行过滤。

    以上是struts1.x下的解决方案。struts2,我们可以采用拦截器来做权限。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突