Struts2拦截器权限学习心得
2016-06-28 17:45
447 查看
总结在前面
1 每个action下面配置拦截器
2 定义全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下
3 excludeMethode,includeMethode方式,感觉并不实用,拦截的是指定到的action的方法名,并不是action个的名字,如: <actionname="login" class="com.action.loginAction">,不是login这个名称; 而是com.action.loginAction里的方法名
除了用3,excludeMethode,includeMethode方式要Java那边继承MethodFilterInterceptor之外,其他的都可以继承AbstracInterceptor
一 登录权限检查
在需要的拦截的包中加入自定义拦截器栈
struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">
<interceptors>
<!--定义一个名为authority的拦截器-->
<interceptor class="com.interceptot.Interceptot" name="authority"/>
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stackname="mydefault">
<!--配置自定义的拦截器-->
<interceptor-refname="authority">
<param name="name">123</param>
</interceptor-ref>
<!--配置内建默认拦截器-->
<interceptor-refname="defaultStack"/>
</interceptor-stack>
</interceptors>
<global-results>
<resultname="login">/Interceptot.jsp</result>
</global-results>
<actionname="login" class="com.action.loginAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
<actionname="insert" class="com.action.one_addAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
<interceptor-refname="mydefault"></interceptor-ref>
</action>
</package>
</struts>
Interceptot.java
package com.interceptot;
import java.util.Map;
importcom.opensymphony.xwork2.Action;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
@SuppressWarnings("serial")
public class Interceptot extendsMethodFilterInterceptor {
privateString name;
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicString doIntercept(ActionInvocation ai) throws Exception
{
ActionContextac=ai.getInvocationContext();
Mapsession = ac.getSession();
if(session.get("user")==null){
System.out.println("没有值 +++action名称:"+name);
returnAction.LOGIN;
}
else{
System.out.println("执行的action名称: "+name);
returnai.invoke();
}
}
}
二 配置全局默认拦截器
定义全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下
Struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">
<interceptors>
<!--定义一个名为authority的拦截器-->
<interceptor class="com.interceptot.Interceptot" name="authority"/>
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stackname="mydefault">
<!--配置自定义的拦截器-->
<interceptor-refname="authority">
<paramname="name">123</param>
</interceptor-ref>
<!--配置内建默认拦截器-->
<interceptor-refname="defaultStack"/>
c0ce
</interceptor-stack>
</interceptors>
<!-- 定义使用全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 -->
<default-interceptor-refname="mydefault"></default-interceptor-ref>
<global-results>
<resultname="login">/Interceptot.jsp</result>
</global-results>
<actionname="login" class="com.action.loginAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
<actionname="insert" class="com.action.one_addAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
</package>
</struts>
3 excludeMethode,includeMethode方式,感觉并不实用,拦截的是方法名,并不是action个的名字,如:<actionname="login" class="com.action.loginAction">,不是login这个名称
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">
<interceptors>
<!--定义一个名为authority的拦截器-->
<interceptor class="com.interceptot.Interceptot" name="authority"/>
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stackname="mydefault">
<!--配置自定义的拦截器-->
<interceptor-refname="authority">
<!-- execute,haha方法不会拦截,是被调用action的方法名称,并不是<actionname="login"的这login -->
<paramname="excludeMethode">execute,haha</param>
<paramname="name">123</param>
</interceptor-ref>
<!--配置内建默认拦截器-->
<interceptor-refname="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 定义使用全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 -->
<default-interceptor-refname="mydefault"></default-interceptor-ref>
<global-results>
<resultname="login">/Interceptot.jsp</result>
</global-results>
<actionname="login" class="com.action.loginAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
<actionname="insert" class="com.action.one_addAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
</package>
</struts>
1 每个action下面配置拦截器
2 定义全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下
3 excludeMethode,includeMethode方式,感觉并不实用,拦截的是指定到的action的方法名,并不是action个的名字,如: <actionname="login" class="com.action.loginAction">,不是login这个名称; 而是com.action.loginAction里的方法名
除了用3,excludeMethode,includeMethode方式要Java那边继承MethodFilterInterceptor之外,其他的都可以继承AbstracInterceptor
一 登录权限检查
在需要的拦截的包中加入自定义拦截器栈
struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">
<interceptors>
<!--定义一个名为authority的拦截器-->
<interceptor class="com.interceptot.Interceptot" name="authority"/>
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stackname="mydefault">
<!--配置自定义的拦截器-->
<interceptor-refname="authority">
<param name="name">123</param>
</interceptor-ref>
<!--配置内建默认拦截器-->
<interceptor-refname="defaultStack"/>
</interceptor-stack>
</interceptors>
<global-results>
<resultname="login">/Interceptot.jsp</result>
</global-results>
<actionname="login" class="com.action.loginAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
<actionname="insert" class="com.action.one_addAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
<interceptor-refname="mydefault"></interceptor-ref>
</action>
</package>
</struts>
Interceptot.java
package com.interceptot;
import java.util.Map;
importcom.opensymphony.xwork2.Action;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
@SuppressWarnings("serial")
public class Interceptot extendsMethodFilterInterceptor {
privateString name;
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicString doIntercept(ActionInvocation ai) throws Exception
{
ActionContextac=ai.getInvocationContext();
Mapsession = ac.getSession();
if(session.get("user")==null){
System.out.println("没有值 +++action名称:"+name);
returnAction.LOGIN;
}
else{
System.out.println("执行的action名称: "+name);
returnai.invoke();
}
}
}
二 配置全局默认拦截器
定义全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下
Struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">
<interceptors>
<!--定义一个名为authority的拦截器-->
<interceptor class="com.interceptot.Interceptot" name="authority"/>
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stackname="mydefault">
<!--配置自定义的拦截器-->
<interceptor-refname="authority">
<paramname="name">123</param>
</interceptor-ref>
<!--配置内建默认拦截器-->
<interceptor-refname="defaultStack"/>
c0ce
</interceptor-stack>
</interceptors>
<!-- 定义使用全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 -->
<default-interceptor-refname="mydefault"></default-interceptor-ref>
<global-results>
<resultname="login">/Interceptot.jsp</result>
</global-results>
<actionname="login" class="com.action.loginAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
<actionname="insert" class="com.action.one_addAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
</package>
</struts>
3 excludeMethode,includeMethode方式,感觉并不实用,拦截的是方法名,并不是action个的名字,如:<actionname="login" class="com.action.loginAction">,不是login这个名称
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="default" namespace="/"extends="struts-default">
<interceptors>
<!--定义一个名为authority的拦截器-->
<interceptor class="com.interceptot.Interceptot" name="authority"/>
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stackname="mydefault">
<!--配置自定义的拦截器-->
<interceptor-refname="authority">
<!-- execute,haha方法不会拦截,是被调用action的方法名称,并不是<actionname="login"的这login -->
<paramname="excludeMethode">execute,haha</param>
<paramname="name">123</param>
</interceptor-ref>
<!--配置内建默认拦截器-->
<interceptor-refname="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 定义使用全局默认拦截器,package下的所有action都会被拦截,不想被拦截的action就放到别的package下 -->
<default-interceptor-refname="mydefault"></default-interceptor-ref>
<global-results>
<resultname="login">/Interceptot.jsp</result>
</global-results>
<actionname="login" class="com.action.loginAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
<actionname="insert" class="com.action.one_addAction">
<resultname="SUCCESS">/success.jsp</result>
<resultname="ERROR">/error.jsp</result>
</action>
</package>
</struts>
相关文章推荐
- Eclipse导出doc文档以及编码 GBK 的不可映射字符
- Arrays.asList()和Collections.addAll()的性能比较
- spring spel表达式语言
- spring boot 不同的环境使用不同的配置
- java IO之文件输入输出流
- 构建自己的Java Web框架(三)之JAVA反射机制
- Java内部类和外部类互相访问问题
- Java设置session超时(失效)的三种方式
- jdk1.8 ThreadPoolExecutor实现机制分析
- eclipse转成Android studio过程中遇到的问题
- spring boot 静态页面展示
- MyEclipse for mac retina屏模糊的问题
- 一个分布式Java Web Session
- eclipse一些设置方法
- Spring整合开发示例(分别与JDBC、Hibernate、Struts整合)
- [2016/06/28] LeetCode / Java - Day 06 -
- JavaWeb文件上传下载功能示例解析
- [改善Java代码]警惕泛型是不能协变和逆变的
- [改善Java代码]不同的场景使用不同的泛型通配符
- 设置日期和时间,弹出的对话框里面,默认日期或者时间看不到