最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultStack。因为登录和访问权限拦截是全局的,拦截返回的结果有些也是全局的,所以我定义了自己的package以便引用。我是这样写的:

==================================================================================================

< package name="struts-my" extends="struts-default">

      < interceptors>

       < !--判断是否登录 和 是否有访问权限  -->

       < interceptor name="auth" class="athenticationInterceptor" />     

       < interceptor-stack name="myStack">

            < interceptor-ref name="auth">< /interceptor-ref>

            < interceptor-ref name="defaultStack">< /interceptor-ref>         

        < /interceptor-stack>         

      < /interceptors>

     

      < default-interceptor-ref name="myStack">< /default-interceptor-ref>     

      < !--  全局结果 -->

      < global-results>

       < !-- 拦截没登录返回结果 -->

            < result name="noLogin" type="redirect">/jsp/no_login.jsp< /result>

            < !-- 拦截没有权限返回结果 -->

            < result name="noPower" type="redirect">/jsp/no_power.jsp< /result>

      < /global-results> 

     < /package>

         

 < package name="default" extends="struts-my">

         < !--登录登出不需要拦截 让它们已入 defaultStack-->

      < action name="login" class="loginAction" method="login">

       < result name="input">/jsp/login.jsp< /result>

       < result name="success" type="redirect">/jsp/index.jsp< /result>

       < interceptor-ref name="defaultStack">< /interceptor-ref>

      < /action>

     

      < action name="logout" class="loginAction" method="logout">

       < result name="success">/jsp/login.jsp< /result>

       < interceptor-ref name="defaultStack">< /interceptor-ref>

      < /action>

。。。。。。。。。

  

 

==================================================================================================

    需要说明的是,登录和登出是不需要拦截的(或者其它不需要拦截的),我们让它们的拦截器继承defaultStack。局部权限高于全局定义的,它们的拦截器栈就是默认的,不是自定义的。

    还有一点要说明的是我,我拦截器的名字auth引用的类是在Spring里面配置的一个bean,我用的是SSH,在类里面我用到了一些数据库的东西,我需要在Spring里注入。如果不需要可以直接写用到的类(要写路径)。

    在登陆成功后,我把“user”放到了session中,我还有一张权限表,里面存的是权限组id和访问的权限。用户表里存放权限组id,这样就可以知道用户有什么权限了。我实现拦截的类是这样写的。

==================================================================================================

public class AuthenticationInterceptor extends AbstractInterceptor {

//这个是需要用到的自定义的方法。

private GroupPowerService groupPowerService;

public String intercept(ActionInvocation invocation) throws Exception {

  

  Map map= invocation.getInvocationContext().getSession();

      

        if (map.get("user")==null)

        {

            return  "noLogin";

        }

        else

        {

         //得到用户的权限id 和 访问的类名

         int id = ((User)map.get("user")).getGroupId();

         //拦截的action的名字

         String action = invocation.getInvocationContext().getName();

        

         //通过用户id 和拦截的action名判断用户是否有这个权限         

         if(this.groupPowerService.hasPower(id,action))

          //继续执行 不拦截

          return invocation.invoke();

        

         return "noPower";

        }

 }

public GroupPowerService getGroupPowerService() {

  return groupPowerService;

 }

==================================================================================================

还有两个jsp页面和一个在Spring的配置文件里的一句话(这里拦截器和action一样,用到什么sevice用注入什么)就没什么可说的了。

form: http://blog.sina.com.cn/s/blog_7d0c4ede0100tfdv.html

最新文章

  1. orm 语法 数据库连接、建表、增删改查、回滚、单键关联 、多键关联、三表关联
  2. 笔记——shell脚本学习指南
  3. HTTP学习笔记(五)
  4. javaWeb-mvc之利用c3p0写入数据库出现乱码
  5. 在Spring Data JPA 中使用Update Query更新实体类
  6. 锋利的jQuery第2版学习笔记4、5章
  7. 用户 &#39;IIS APPPOOL\DefaultAppPool&#39;登录失败
  8. QQ与我联系
  9. Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端
  10. hdu1242 Rescue bfs+优先队列
  11. Linux目录结构和基础知识
  12. 《一头扎进SpringMvc视频教程》
  13. 评分模型的检验方法和标准&amp;信用评分及实现
  14. mybatis泛型(一)
  15. 帝国CMS 列表模板页面 list.var 内容截取
  16. 【Java】 剑指offer(59-1) 滑动窗口的最大值
  17. build docker deivcemapper
  18. Ionic模版的使用
  19. 面向企业级的开源WebGIS解决方案--MapGuide(对比分析)
  20. cc(self)是什么意思?

热门文章

  1. python2.7入门---file(文件)&amp;OS 文件&amp;目录方法
  2. 从PRISM开始学WPF(一)WPF-更新至Prism7.1
  3. 安装sql server
  4. 封装一个List集合和datatable相互转换的工具类(可对指定列进行重命名并且指定输出列)
  5. springmvc常用jar包
  6. 阿牛的EOF牛肉串(递推)
  7. python3.6 新特性学习
  8. HDFS伪分布式环境搭建
  9. Dijkstra标准模板
  10. 使用HashOperations操作redis