关于SSH注解开发 拦截器的配置以及实现

时间:2021-03-08 20:36:13

     嗨!大家好,说起来很惭愧。 工作有一段时间了,但是一直没敢写博客。原因多半是不知道自己写什么、能写些什么。

       今天, 我终于鼓起勇气准备写一篇文章,为的是以后自己查阅方便, 如果有错误不足之处还望大家能指出,我会继续学习的谢谢大家了。

  好了下面我们正式步入正文。直接上代码

  

   struts.xml文件

<struts>
	<include file="struts-default.xml"></include>
	<package name="customdefault" extends="struts-default">
		<!-- 默认继承Struts2 的配置文件 -->
		<interceptors>
			<!-- 自定义的拦截器 -->
			<interceptor name="testInterceptor"
				class="cn.com.agricom.Intercepters.AuthIntercepter"></interceptor>
			<!-- 配置自己的拦截器栈 -->
			<interceptor-stack name="customInterceptor">
				<!-- 拦截器栈包含自定义的拦截器和默认的拦截器 -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="testInterceptor"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- 设置全局 全局默认的拦截器栈-->
		<default-interceptor-ref name="customInterceptor"></default-interceptor-ref>
		<global-results>
			<!-- 当返回login视图名时,转入/login.jsp页面 -->
			<result name="index">/index.jsp</result>
		</global-results>
	</package>
	<!-- 开启使用开发模式,详细错误提示 -->
	<constant name="struts.devMode" value="false" />
	<!-- 将对象交给spring管理 -->
	<constant name="struts.objectFactory" value="spring" />
	<!-- 指定资源编码类型 -->
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 设置struts2文件上传最大值 -->
	<constant name="struts.multipart.maxSize" value="209715200" />
	<!-- 指定每次请求到达,重新加载资源文件 -->
	<constant name="struts.i18n.reload" value="false" />
	<!-- 指定每次配置文件更改后,自动重新加载 -->
	<constant name="struts.configuration.xml.reload" value="false" />
	<!--
		<constant name="struts.convention.result.path" value="/WEB-INF/"/>
	-->
	<!-- 默认后缀名 -->
	<!--
		<constant name="struts.action.extension" value="do,action,jhtml,," />
	-->
	<!-- Struts Annotation -->
	<!--     <constant name="actionPackages" value="com.test1"/> -->
	<!--
		指定上传文件的目录 <constant name="struts.multipart.saveDir"
		value="f:\"></constant>
	-->

</struts>    
关于SSH注解开发 拦截器的配置以及实现
@SuppressWarnings("serial")
public class AuthIntercepter extends AbstractInterceptor  {
    private static Logger log =  Logger.getLogger(AuthIntercepter.class);
	/* (non-Javadoc)
	 * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
	 */
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		log.debug("执行到了拦截器代码------>");
     <span style="color:#ff0000;">这里返回的name值是你在映射路径中的名称 比如这个拦截的方法名为 "</span><span style="color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">loginAction</span><span style="color:#ff0000;">" 那么对应的路径为  /*/</span><span style="color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">loginAction</span><span style="color:#ff0000;">
</span>
		 String name = invocation.getInvocationContext().getName();//获得执行的方法名称   
		 System.out.println("=============方法名称为:"+name+"=======================");
		 if("loginAction".equals(name)){
			 log.debug("检测到登录的方法名称为: loginAction   log debug输出");
			 System.out.println("检测到登录的方法名称为: loginAction   console输出");
			 return "index";
		 }
 使用拦截器     @ParentPackage("customdefault")   这个是我们刚才在struts.xml中定义的package名称  现在在类上注解表示当前类继承了刚才的包 因为我们配置的是全局拦截器 所以这里不用引用即可使用  

@ParentPackage("customdefault")
@Scope("prototype")
// 因为默认又Spring 产生的对象都是单例的 在Struts中每个请求会有独立的action 所以这里要设置成非单例的模式
@Controller
@Namespace(value = "/userAction")
public class TestAction extends ActionSupport {