最近学习了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

Struts2 利用拦截器 interceptor 控制登陆和访问权限的更多相关文章

  1. JavaWeb_(Struts2框架)拦截器interceptor

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  2. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  3. Struts2他们拦截器实例定义—登陆权限验证

    版本号:struts2.1.6 这种情况下实现功能:用户需要指定username登陆,进入相应的页面运行成功登陆作战,否则,它返回到着陆的登录页面,当直接进入操作页面(登陆访问页面后的能力)如果不同意 ...

  4. struts2的拦截器(Interceptor)与过滤器(Filter)

    一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...

  5. 【Struts2】拦截器

    一.概述 二.在Struts2中使用拦截器 2.1 步骤 2.2 分析拦截器原理 2.3 关于interceptor与Filter区别: 三.案例 一.概述 介绍拦截器: struts2拦截器使用的是 ...

  6. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  7. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  8. Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)

    参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspec ...

  9. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

随机推荐

  1. java 第六章 面向对象基础

    1.面向对象编程思想 面向过程编程 传统的C语言属于面向过程编程.面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决. 面向过程 ...

  2. [Hbase]hbase命令行基本操作

    -进入hbase shell hbase shell - 帮助help help - 查看hbase versionversion - 查看hbase 状态 status - 创建表create 't ...

  3. Remote X11 GUI for Linux/Unix

    摘自:https://www.redwireservices.com/remote-x11-for-linux-unix The Problem One of my most feared quest ...

  4. 零基础学习Vim编辑器

    **********************************************************************0.这篇教程的简介:Vim是Linux/Unix下的经典编辑 ...

  5. Android应用AsyncTask处理机制详解及源码分析

    1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...

  6. Qt编译出错:During startup program exited with code 0xc0000135

    原文连接:http://blog.csdn.net/wswxfwps/article/details/37317905 出现这个问题,是因为我用到了外部的dll库,lib库我是添加到了.pro文件中了 ...

  7. Python3 使用 logging.basicConfig() 配置输出日志中的中文乱码解决办法

    在源码中修改encoding='utf-8',因为 logging.basicConfig() 配置时实际上是用到了4大组件,只不过给了默认值而已,如果不知道怎么找到源码,告诉你们个快捷键,选中你lo ...

  8. Tensorflow编程基础之Mnist手写识别实验+关于cross_entropy的理解

    好久没有静下心来写点东西了,最近好像又回到了高中时候的状态,休息不好,无法全心学习,恶性循环,现在终于调整的好一点了,听着纯音乐突然非常伤感,那些曾经快乐的大学时光啊,突然又慢慢的一下子出现在了眼前, ...

  9. ajax中用jsonp接收json数据

    最近在做查快递网页时遇到一个问题,调用的快递100的api,但是快递100api不允许跨域请求,就是用127.0.0.1发的请求会直接被拦截. 只是个简单的网页,不想自己做服务器转发,最后找到了一个y ...

  10. C++结构体排序

    在C++中,对结构体的排序方式比C语言丰富的多.在C语言中,我们主要是通过qsort进行排序操作(抛开手写排序算法不说). 在C++<algorithm>中,有一个十分强大的排序函数sor ...