Struts2 利用拦截器 interceptor 控制登陆和访问权限
最近学习了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 控制登陆和访问权限的更多相关文章
- JavaWeb_(Struts2框架)拦截器interceptor
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- Struts2他们拦截器实例定义—登陆权限验证
版本号:struts2.1.6 这种情况下实现功能:用户需要指定username登陆,进入相应的页面运行成功登陆作战,否则,它返回到着陆的登录页面,当直接进入操作页面(登陆访问页面后的能力)如果不同意 ...
- struts2的拦截器(Interceptor)与过滤器(Filter)
一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...
- 【Struts2】拦截器
一.概述 二.在Struts2中使用拦截器 2.1 步骤 2.2 分析拦截器原理 2.3 关于interceptor与Filter区别: 三.案例 一.概述 介绍拦截器: struts2拦截器使用的是 ...
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)
参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspec ...
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
随机推荐
- java 第六章 面向对象基础
1.面向对象编程思想 面向过程编程 传统的C语言属于面向过程编程.面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决. 面向过程 ...
- [Hbase]hbase命令行基本操作
-进入hbase shell hbase shell - 帮助help help - 查看hbase versionversion - 查看hbase 状态 status - 创建表create 't ...
- Remote X11 GUI for Linux/Unix
摘自:https://www.redwireservices.com/remote-x11-for-linux-unix The Problem One of my most feared quest ...
- 零基础学习Vim编辑器
**********************************************************************0.这篇教程的简介:Vim是Linux/Unix下的经典编辑 ...
- Android应用AsyncTask处理机制详解及源码分析
1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...
- Qt编译出错:During startup program exited with code 0xc0000135
原文连接:http://blog.csdn.net/wswxfwps/article/details/37317905 出现这个问题,是因为我用到了外部的dll库,lib库我是添加到了.pro文件中了 ...
- Python3 使用 logging.basicConfig() 配置输出日志中的中文乱码解决办法
在源码中修改encoding='utf-8',因为 logging.basicConfig() 配置时实际上是用到了4大组件,只不过给了默认值而已,如果不知道怎么找到源码,告诉你们个快捷键,选中你lo ...
- Tensorflow编程基础之Mnist手写识别实验+关于cross_entropy的理解
好久没有静下心来写点东西了,最近好像又回到了高中时候的状态,休息不好,无法全心学习,恶性循环,现在终于调整的好一点了,听着纯音乐突然非常伤感,那些曾经快乐的大学时光啊,突然又慢慢的一下子出现在了眼前, ...
- ajax中用jsonp接收json数据
最近在做查快递网页时遇到一个问题,调用的快递100的api,但是快递100api不允许跨域请求,就是用127.0.0.1发的请求会直接被拦截. 只是个简单的网页,不想自己做服务器转发,最后找到了一个y ...
- C++结构体排序
在C++中,对结构体的排序方式比C语言丰富的多.在C语言中,我们主要是通过qsort进行排序操作(抛开手写排序算法不说). 在C++<algorithm>中,有一个十分强大的排序函数sor ...