别告诉我每个页面加段代码啊。
struts2+spring3
我能想到的办法无非有3种:
1.用struts的拦截器,缺点是个每个action需要配置一下,且jsp无法配置。2.用spring的拦截器,jsp仍然无法拦截,且得不到session、3.用java ee的filter,不过在web.xml里配置匹配路径是个 问题,url-pattern只支持通配符,不支持具体匹配的路径名字,受保护的页面或action是有限的,我希望能够具体地指定。
综上,有没有最佳实践?

解决方案 »

  1.   

    谁告诉你说javaee的url-pattern不能只拦截一个路径的阿.? 我以前用servlet做项目的时候就有需求只拦一个.!而且在ssh中, 权限判断难道你还要在jsp中干吗.? 以MVC的角度考虑, 用户访问jsp都是要通过前置action跳转的,这样一来,用Interceptor就ok了
      

  2.   


    你没看懂我意思,要拦截的页面是N个,不是只有一个,如果只有一个,这个问题都没必要讨论了。至于jsp是从action转过来,可以看出你没啥实际项目经验,如果用户直接输入jsp地址怎么办?
      

  3.   

    LZ如果是你的项目你会直接让用户访问jsp吗.?如果你的jsp里面要读数据库怎么办.? 如果你说在jsp里面读那我没话说.!
    SSH做项目的jsp都应该丢在web-inf下面的.! 不能让用户直接访问jsp.!  访问jsp必定404,处理下404错误,显示给用户说你访问的页面不存在.!
      

  4.   

    如果任何一个jsp,哪怕不查数据库的jsp,也要先去个action,那岂非多走一步,于性能有损,我没说jsp里去访问数据库,但jsp作为视图是要显示从后台来的数据库的,直接访问jsp而且需要身份保护的情况虽然少,但也不是绝对没有,比如管理员要看一下在线总人数,这个信息可以放在一个application范围内的一个属性中,没必要看数据库,直接在jsp里打开看看就行。
      

  5.   

    就算把所有jsp都放在web-inf里,所有的访问都是请求action,那给每个要验证的action配一遍interceptor也是很麻烦的事情。目前我想到的办法还是写filter,路径/*,但配一个参数,指明实际要验证的地址,以逗号分隔一下,然后在filter里读取要验证的地址,匹配就验证,不匹配直接进入页面。
      

  6.   

    首先一点:MVC不就是由控制器到视图吗.?我给你解释一下为每个action配置interceptor的方法:
    你自己定义一个包,继承struts-default里面注册拦截器, 并且写上默认的拦截器栈,这个栈引用你的interceptor和struts-deufalt的defaultStack,
    然后你以后的action都继承这个包,不就ok了.!
      

  7.   

    SPRING 有个安全框架acige貌似是这个这个可以做身份效验