最近学习了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. 【转】moodle中年级、班级、小组研讨

    Moodle平台支持年级.班级.小组功能,提供了方便易用的分组工具.小组支持公开和封闭属性,配合教学功能模块,教师可以组织小组为单位的教学活动. 在Moodle中,年级.班级.小组主要是通过群组(co ...

  2. shell -- shift用法

    shift是Unix中非常有用的命令.可以使命令参数左移,从而使脚本程序中命令参数位置不变的情况下依次遍历所有参数.如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1. ...

  3. Delphi实例之橡皮筋画图的实现

    Delphi实例之橡皮筋画图的实现 在<Delphi7基础教程>这本书的练习中提到过一个橡皮筋画图的例子,书上的源码是错误的!不知道是打印的错误还是本身源码就有问题,我将它改了过来. 在F ...

  4. linux中wget 、apt-get、yum rpm区别

    wget 类似于迅雷,是一种下载工具, 通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理名字是World Wide Web”与“get”的结合. yum: 是r ...

  5. quartz 使用总结

    quartz是一个任务调度框架,具体的用途比如说,我想我的程序在每天的3点干什么事,每隔多长时间做一件什么事.quartz框架就可以完美地解决这些. 1.xml配置方式 首先我是用spring来管理的 ...

  6. 树莓派i2c功能

    默认i2c是关闭的,用raspi-config 命令,会弹出一个配置框图 选择enable i2c就可以了 reboot之后 没有在/dev/目录下发现i2c-x的设备,这个时候需要做以下操作 1.添 ...

  7. resetroot_169route_python3(用于ubuntu16.04)

    #!/usr/bin/python3 import os import sys import json import urllib.request import urllib.parse import ...

  8. 点击查看大图Activity

    1.使用方式 Intent intent = new Intent(FriendCircleActivity.this, ImageGralleryPagerActivity.class);//0,索 ...

  9. Elasticsearch 监控和部署

    Elasticsearch: ! [ https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/_cluster_health. ...

  10. 软工实践 - 第二十五次作业 Beta 冲刺(3/7)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10116979.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...