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 ...
随机推荐
- python2中将Unicode编码的中文和str相互转换
在python2x版本中 关于中文汉字转换 1.中文------字符串格式 >>> s = '汉字' >>> type(s) <type 'str'> ...
- 详解 RPL、DPL、CPL 的关系
保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别,使大多数情况下都只和同级代码发生关系.Intel的80286以上的cpu可以识別4个特权级(或特权层) ,0级到3级.数 ...
- Django的命令操作,python
忘记时候,查看命令用:python manage.py 1 建立项目的命令: django-admin.py startproject project_name 2 在项目的目录下建立app: dja ...
- Android——搜索传统蓝牙设备
一,主布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...
- LeetCode:12. Integer to Roman(Medium)
1. 原题链接 https://leetcode.com/problems/integer-to-roman/description/ 2. 题目要求 (1) 将整数转换成罗马数字: (2) 整数的范 ...
- 使用maven插件生成grpc所需要的Java代码
1.首先需要编写自己需要的.proto文件,本文重点不在这里,.proto可以参考grpc官方例子 https://grpc.io/docs/quickstart/java.html 2.创建自己的J ...
- 创龙TMS320C6748开发找不到 tl.dsp.evm6748的问题研究
1. 使用中遇到问题,看了一下帖子说是把tl.dsp.evm6748换成ti.platforms.evm6748可以编译过去.这个包是在XDCtools里面的. js: "D:/ti/ccs ...
- 关于 poorpool
poorpool 真名 chenyixiao.是一条傻逼题都不会做的没有脑子的咸鱼. 山西省临汾第一中学 高二 sx省队里最菜的那一个进队靠暴力. 普通的理科生,曾经爱好数学,然而到了高中发现自己所谓 ...
- nginx location优先级
目录 1. 配置语法 2. 配置实例 3. 总结: 网上查了下location的优先级规则,但是很多资料都说的模棱两可,自己动手实地配置了下,下面总结如下. 1. 配置语法 1> 精确匹配 lo ...
- [CH5302]金字塔
题面 虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下.经过多年的研究,科学家对这座金字塔的内部结构已经有所了解.首先,金字塔由若干房间组成,房间之间连有通道.如果把房间看作节点, ...