- 浏览: 1984372 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (188)
- java基础 (22)
- 经验+注意 (39)
- Oracle (34)
- javaScript (28)
- jquery (24)
- iBatIS (11)
- hibernate (8)
- struts1.x (1)
- spring (1)
- SVN (1)
- myeclipse (12)
- jbmp工作流 (1)
- 其他 (22)
- 杂谈 (4)
- struts2 (5)
- css (4)
- 正则表达式 (2)
- jstl标签 (4)
- Java Tree (2)
- Jboss (1)
- json (1)
- HttpURLConnection (1)
- Apache commons工具包 (1)
- groovy+grails (2)
最新评论
-
q2425533:
Java字符串倒序输出 + 数组的排序 -
变脸小伙:
今天也跟着学习了,用到了
struts2拦截器 获得请求方法名+获得请求参数 -
tuspark:
讲解的很不错。URLConnection类的内容也可以看这篇文 ...
HttpURLConnection详解 -
wolf746773350:
...
window.location.href/replace/reload()--页面跳转+替换+刷新 -
wolf746773350:
[/flash]
window.location.href/replace/reload()--页面跳转+替换+刷新
SSI框架为基础开发的,hulian平台
struts2拦截器里如何知道你请求的是那个方法
使用:invocation.getInvocationContext().getName();
//输出Priv_queryPriv,这正是我访问的Action中的方法。
1.struts.xml中这么定义的
<struts> <!-- character filter --> <constant name="struts.i18n.encoding" value="utf-8" /> <constant name="struts.multipart.saveDir" value="/tmp" /> <constant name="struts.multipart.maxSize" value="1000000000" /> <!-- CONFIG Global Exception --> <package name="basePriv" extends="struts-default"> <interceptors> <interceptor name="myPrivInterceptor" class="PrivInterceptor"/> <interceptor-stack name="b2cplatPrivInterceptor"> <interceptor-ref name="myPrivInterceptor"> <param name="includeMethods"></param> <param name="excludeMethods"> loginMain,loginTop,loginSwitch,loginRight,login,leftMenuShow, queryCityList,queryInOrOutAreaList,queryDistricts </param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="b2cplatPrivInterceptor"/> <global-results> <result name="privError">/errorPrivPage.jsp</result> <result name="updateEmpPassword">/jsp/phone/xxxx.jsp</result> <result name="loginPage" type="redirect">/jsp/phone/login/trunToLogin.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="error" exception="java.lang.Exception">/errorPage.jsp </exception-mapping> </global-exception-mappings> </package> <package name="managerPlatform" extends="basePriv" namespace="/"> <action name="*_*" class="{1}Action" method="{2}"> <result name="success">${successPath}</result> <result name="error">${errorPath}</result> <result name="input">${inputPath}</result> <result name="redirectAction" type="redirectAction">${redirectActionPath}</result> <result name="doChain" type="chain">${chainPath}</result> <result name="redirect" type="redirect">${redirectPath}</result> <result name="print" type="stream"> <param name="contentType">application/vnd.ms-excel</param> <param name="inputName">inputStream</param> <param name="contentDisposition">filename="${printFileName}"</param> <param name="bufferSize">1024</param> </result> </action> </package> </struts>
2.Action这么写
/** * 权限信息控制 * @author ken * @date 2011-9-13 下午15:00:46 */ @Scope("prototype") @Controller("PrivAction") public class PrivAction extends BaseAction{ private static final long serialVersionUID = 1L; static final Logger log = Logger.getLogger(PrivAction.class); @Autowired private PrivService privService; /* 权限模型 */ private TEmployeePriv employeePriv; /** * 权限查询 * @return */ public String queryPriv(){ if(employeePriv==null){ employeePriv = new TEmployeePriv(); successPath = "/jsp/phone/priv/priv/privList.jsp"; return SUCCESS; } try { entitys = this.privService.queryAllPriv(employeePriv); } catch (Exception e) { log.error("",e); } successPath = "/jsp/phone/priv/priv/privList.jsp?flag=true"; return SUCCESS; } }
3.struts2拦截器
/** * 权限拦截器Interceptor * @author mengxianjun * @date 2011-4-8 下午03:07:24 * */ @SuppressWarnings("serial") @Component( "PrivInterceptor" ) @Scope("prototype") public class PrivInterceptor extends MethodFilterInterceptor{ @Resource(name = "EmployeeService") private EmployeeService empSafeService;//工号安全Service @Resource(name="EmployeeRoleService") private EmployeeRoleService empRoleService; /* (non-Javadoc) * @see com.opensymphony.xwork2.interceptor.MethodFilterInterceptor#doIntercept(com.opensymphony.xwork2.ActionInvocation) * @author mengxianjun * @date 2011-4-8 下午03:07:24 */ @SuppressWarnings("unchecked") @Override protected String doIntercept(ActionInvocation invocation) throws Exception { System.out.println("============"+invocation.getInvocationContext().getName()); System.out.println("============"+invocation.getInvocationContext().getLocale()); System.out.println("============"+invocation.getInvocationContext().getParameters()); System.out.println("执行到拦截器里。。。。"); ActionContext act = invocation.getInvocationContext(); //获得session Map session = invocation.getInvocationContext().getSession(); TEmployeeInfo sessionInfo = (TEmployeeInfo) session.get("user"); String employee_id=""; /** * 一、是否登录 */ try { employee_id = sessionInfo.getEmployeeId(); } catch( NullPointerException e ) { act.put("message", "Session过期,请重新登录!"); return "loginPage"; } /*=========================================================单点登录判断============================================*/ HashMap<String, String> map = (HashMap<String, String>) ServletActionContext.getServletContext().getAttribute("userList"); String sessionID_User = map.get( employee_id ); //登录用户session的ID String sessionID_Now = ServletActionContext.getRequest().getSession().getId(); //当前session的ID if( ! sessionID_User.trim().equals(sessionID_Now) ) { act.put("message", "此账号已登录!"); return "privError"; } /*=========================================================单点登录判断============================================*/ /** * 二、登录成功后,根据URL进行权限判断 */ if( !"".equals(employee_id.trim()) && null!=employee_id ) { /** * 2.1判断工号登录后,业务密码是否为123456,是跳转到商户安全设置,修改业务密码 */ /*TEmployeeSafe empSafe = empSafeService.queryEmployeSafe(employee_id); if( null!=empSafe ) { String MD5password = KeyedDigestMD5.getKeyedDigest("123456","").toUpperCase();//获得123456的MD5值 String employeePass = empSafe.getEmployeePass();//获得登录密码 String employeePass2 = empSafe.getEmployeePass2();//获得工号业务密码 if( MD5password.equals(employeePass) || MD5password.equals(employeePass2) ) { act.put("message", "欢迎使用本系统,您的登录密码、业务密码过于简单,请修改!"); return "updateEmpPassword"; } }*/ /** * 2.2截取请求URL */ HttpServletRequest request = ServletActionContext.getRequest(); String currentURL = request.getRequestURI(); String targetURL = ""; if( -1 != currentURL.indexOf("?") )//普通<form>标签是?分隔传来的参数 { String paramURL = currentURL.substring(currentURL.indexOf("?",0), currentURL.length());//参数URL int targetLength = currentURL.length() - paramURL.length();//去掉请求参数Length targetURL = currentURL.substring(currentURL.indexOf("/",1), targetLength); System.out.println("去掉请求参数路径URL:"+targetURL); } else if( -1 != currentURL.indexOf(";") )//struts2标签<s:form>标签是;分隔传来的参数 { String paramURL = currentURL.substring(currentURL.indexOf(";",0), currentURL.length());//参数URL int targetLength = currentURL.length() - paramURL.length();//去掉请求参数Length targetURL = currentURL.substring(currentURL.indexOf("/",1), targetLength); System.out.println("去掉请求参数路径URL:"+targetURL); } else { targetURL = currentURL.substring(currentURL.indexOf("/",1), currentURL.length()); System.out.println("请求路径URL:"+targetURL); } /** * 2.3必须保证当前用户:1.工号必须开启2.角色已分配 3.角色已启用 4.角色有权限集合 */ if("12".equals(sessionInfo.getState())) { act.put("message", "工号已锁定!"); return "privError"; } else if("15".equals(sessionInfo.getState())) { act.put("message", "工号已注销!"); return "privError"; } else if( sessionInfo.getRoleState()==null || "".equals(sessionInfo.getRoleState()) ) { act.put("message", "未分配角色!"); return "privError"; } else if( !"10".equals(sessionInfo.getRoleState()) ) { act.put("message", "该角色未启用!"); return "privError"; } else { try { /*1.得到中间表TRolePriv集合*/ TRolePriv rp = new TRolePriv(); rp.setRoleNum(sessionInfo.getRoleNum()); List<TRolePriv> rolePrivList = empRoleService.queryRolePriv(rp); /*2.根据中间表TRolePriv,生成TEmployeePriv集合*/ List<TEmployeePriv> privList = new ArrayList<TEmployeePriv>(); for( TRolePriv trp : rolePrivList ) { TEmployeePriv myPriv = empRoleService.queryPrivById(trp.getPrivNum()); if(myPriv!=null&&myPriv.getPrivUrl()!=null&&!"".equals(myPriv.getPrivUrl())){ privList.add(myPriv);//去掉一级菜单添加进privList,privUrl为空是一级菜单 } } /*3.权限privUrl与targetURL比较*/ if( privList.size()>0 ) { int privState = 0; for( TEmployeePriv p : privList ) { /** * 对比去掉请求参数后的URL是否一致,即/Login_login */ String privUrl = p.getPrivUrl();//TEmployeePriv中privUrl,可能带参数,可能不带参数 if(-1!=privUrl.indexOf("?",0)){ String paramPrivURL = privUrl.substring(privUrl.indexOf("?",0), privUrl.length());//参数URL int targetPrivLength = privUrl.length() - paramPrivURL.length();//去掉请求参数Length privUrl = privUrl.substring(privUrl.indexOf("/",0), targetPrivLength);//TEmployeePriv中privUrl去掉参数 } if( privUrl.equals(targetURL) ) { privState = 1; } } if( 1 == privState ) { return invocation.invoke(); } else { System.out.println("-------得到Priv权限集合,但是无访问权限---------"); act.put("message", "您没有权限 , 拒绝访问!"); return "privError"; } } else { act.put("message", "您没有相应权限 , 拒绝访问!"); return "privError"; } } catch( NullPointerException e ) { act.put("message", "您没有权限 , 拒绝访问!"); return "privError"; } } } else { act.put("message", "Session过期,请重新登录!"); return "loginPage"; } } }
输出:
16:05:35,813 INFO [STDOUT] ============Priv_queryPriv 16:05:35,813 INFO [STDOUT] ============zh_CN 16:05:35,813 INFO [STDOUT] ============{} 16:05:35,813 INFO [STDOUT] 执行到拦截器里。。。。 16:05:35,813 INFO [STDOUT] 请求路径URL:/Priv_queryPriv
=========================================================================================================
struts2 拦截拦截器怎么样获得action 后面的参数 例如 login.action? user.user_name='aaaaa'
我想获得到action 后面的参数再做判断,请问怎么样获得呢
问题补充:
我想在拦截器里面得到传入的user.user_name
最佳答案
先在拦截器intercept()方法中获取parameters对象:
Map paramMap = invocation.getInvocationContext().getParameters();
然后用parameters对象获取参数(是一个字符串数组):
String[] names = (String[]) paramMap.get("user.user_name");
String username=names[0];
评论
4 楼
变脸小伙
2016-03-01
今天也跟着学习了,用到了
3 楼
mszb00123
2013-10-04
谢谢,帮了大忙了
2 楼
古卷书书
2013-08-03
学习下。
1 楼
everytimeyou
2011-11-21
select
发表评论
-
java获得系统盘符(Windows、linux自动切换)
2017-12-22 16:08 2415做文件读写时,本机开发是windows系统,但服务器是li ... -
mysql 时间列自动插入当前日期时间
2012-05-09 13:46 3161用current_timestamp,不过这个默认值 ... -
java switch的使用+switch用String作为条件
2012-03-23 16:58 67377一、java switch的基本使用: /* int参数的s ... -
Java字符串倒序输出 + 数组的排序
2012-03-08 18:06 9337一、Java字符串倒序输出 方法一:利用 ... -
HTML转义字符
2012-02-23 14:53 2708HTML字符实体(Character Entit ... -
jQuery Ajax 实例 ($.ajax、$.post、$.get)
2012-02-09 10:43 300881Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦, ... -
checkbox加onClick事件,ajax异步请求后台,$.ajax
2012-02-08 17:02 6804XXX平台要实现一个功能,公告弹出页面上使用复选框设置不再通知 ... -
js限制文件上传类型
2012-01-16 11:24 2272var name = $('#file').val(); v ... -
Random()随机数+随机切换图片
2011-12-13 14:55 3155一、Random()随机数 转自:http://bl ... -
Request对象各种获得路径的方法+Request对象各种方法(.getRemoteAddr)
2011-12-13 14:43 9688用jboss发布的工程,测试request对象返回路径的方法, ... -
HttpURLConnection与URL---接口的应用
2011-11-26 10:14 1862一版XXX中的更新内存的接口应用: 一、定义一个有返回 ... -
ibatIS的<dynamic prepend="WHERE">原理,是判断前一个AND字母是否存在
2011-10-31 17:51 24853今天付出了惨痛的代价,调sqlMap文件调了一下午,杯具啊!! ... -
session详细解析(是否过期、失效时间)
2011-10-26 15:22 11266Session一直是我们做web项 ... -
insert into (select from)表复制+select into from表复制
2011-10-18 17:20 12115Insert INTO table(field1,field2 ... -
jsp、js、<a>的访问方式(绝对路径+相对路径)
2011-10-17 17:38 32927一、项目中应用: 1.PrivInterceptor ... -
frameset中如何直接跳转至首页(中转页)--window.parent.parent.location.replace
2011-10-13 17:50 2640之间跳转页(中转页),turnToLogin.jsp ... -
request.getContextPath获取绝对路径
2011-10-13 17:31 34744项目需求:所有jsp页必须通过Action转发,不能直接在地址 ... -
json-lib-2.2.3-jdk15.jar+所需jar包
2011-10-10 13:05 13672做项目,用到了json-lib-2.2.3-jdk15.jar ... -
JSTL EL表达式读取cookie中的值
2011-09-30 15:31 132561.cookie中设置值 <script type=& ... -
Jquery FrameSet设置换肤
2011-09-30 15:25 3186使用Jquery给<FrameSet>换肤, ...
相关推荐
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
在Struts2中,这些处理逻辑被封装在独立的类中,当请求到达Action之前,拦截器会按照预定义的顺序执行,执行完后再继续进行Action处理,最后返回结果。拦截器可以用于日志记录、权限验证、性能监控等多种场景。 **...
- **拦截器的核心功能**:Struts2拦截器可以动态地拦截发送到指定Action的请求,并在Action执行前后插入自定义的逻辑处理。 - **代码重用原则**:通过拦截器机制,可以将多个Action中需要重复指定的代码提取出来,...
2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...
2. **默认拦截器栈**:`defaultStack`包含了Struts2内置的一些拦截器,如`params`(处理参数),`i18n`(处理国际化),`exception`(处理异常)等。 3. **应用全局拦截器**:现在,所有Action都会在执行前经过`...
标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...
Struts2框架会根据配置创建拦截器实例,然后在每次请求时调用其`intercept()`方法。拦截器实例通常是线程安全的,因此对于多线程环境,Struts2会为每个请求创建新的ActionInvocation实例,但拦截器实例是共享的。 *...
当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...
在Struts2中,我们可以通过拦截器来检查用户是否具有访问某个Action或方法的权限。以下是一个简单的步骤: 1. 创建权限拦截器:首先,我们需要编写一个实现了`Interceptor`接口的类,例如`AuthorizationInterceptor...
例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 在深入源码之前,我们需要了解几个关键类: 1. `...
struts2 拦截器 解决 请求乱码 和 输出乱码 java
当一个请求到来时,Struts2会按照配置的顺序依次执行这些拦截器,最后调用Action方法。 要实现拦截不文明字迹,我们首先需要创建一个自定义的拦截器类。这个类需要继承自`...
当请求到达Action时,Struts2会调用这个链上的所有拦截器,然后才执行实际的动作方法。通过在拦截器中实现权限验证,我们可以在用户尝试访问受保护资源之前检查其登录状态。 接下来,我们创建一个自定义的登录拦截...
在"Struts2 拦截器过滤方法(二十八)"的博文中,可能更具体地讲解了一些高级用法,如条件判断拦截、组合拦截器、拦截器的堆栈管理和自定义参数传递等。 对于项目中的源码部分(src目录),可能包含了自定义拦截器...
在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的行为。下面我们将详细介绍如何创建自定义的Struts2拦截器。 1. **理解Struts2拦截器工作原理** Struts2中的拦截器是一个...
在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制,而国际化(Internationalization,简称i18n)则能帮助我们构建支持多语言的Web应用。下面将详细解释这两个知识点以及它们如何在Struts2...
Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.
在这个例子中,`defaultStack`是Struts2默认提供的拦截器栈,包含了一些基础的拦截器,如`params`(处理请求参数)、`i18n`(国际化)等。`myCustomInterceptor`则是我们自定义的拦截器。 创建自定义拦截器有三种...