`

Annotation配置Interceptor

阅读更多

利用注解配置拦截器:

在xwork包下有:

com.opensymphony.xwork2.interceptor.annotations.After.class

com.opensymphony.xwork2.interceptor.annotations.Before.class

com.opensymphony.xwork2.interceptor.annotations.BeforeResult.class

com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor.class

它们是用来配置annotation的。其中前三个依赖于AnnotationWorkflowInterceptor。下面用例子介绍一下:

<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
    <s:form method="POST" action="login.action">
    	<s:textfield name="user.username" label="Username:"></s:textfield>
    	<s:password name="user.password" label="Password:"></s:password>
    	<s:submit value="提交"></s:submit>
    </s:form>
  </body>

 

<filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<package name="annotation" extends="struts-default">
		<interceptors>
			<interceptor name="annotationInterceptor" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"></interceptor>
		</interceptors>
		<action name="login" class="com.zchen.action.LoginAction" >
			<result name="success">index.jsp</result>
			<interceptor-ref name="annotationInterceptor"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
	</package>
</struts>

 

package com.zchen.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.annotations.After;
import com.opensymphony.xwork2.interceptor.annotations.Before;
import com.opensymphony.xwork2.interceptor.annotations.BeforeResult;
import com.zchen.model.User;

public class LoginAction extends ActionSupport implements SessionAware {
	private static final long serialVersionUID = 4387832093273420762L;
	private User user = null;
	
	public User getUser() {
		return user;
	}



	public void setUser(User user) {
		this.user = user;
	}



	@Override
	public String execute() throws Exception {
		System.out.println("action方法");
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
		return super.execute();
	}


    @Before
    public void doBefore() {
    	System.out.println("action执行之前方法被调用");
	}
    
    @After
    public void doAfter() {
    	System.out.println("action执行之后方法被调用");
	}
    @BeforeResult
    public void doBeforeResult() {
    	System.out.println("result执行之前方法被调用");
	}
    
	public void setSession(Map<String, Object> arg0) {

	}

}

 

package com.zchen.model;

public class User {
	
	private String username;
	
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	

}

 

此时输出顺序是:

         action执行之前方法被调用
         action方法
         admin
         1234
         result执行之前方法被调用
         action执行之后方法被调用

 

所以我们可以用这种配置判断用户是否登录,只有登录了才可以访问页面:

(我们单写一个Action类作为权限管理简要代码如下)

package com.zchen.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class AnthInterceptor extends ActionSupport implements SessionAware {
	private static final long serialVersionUID = 4387832093273420762L;
	Map session;
	public String doBefore(){
		if(session.get("login")==null){
			//如果没有session表示用户还没有登录
			return Action.LOGIN;
		}else{
			//返回null表示程序继续执行execute方法而此方法默认返回success
			return null;
		}
	}
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

}

 

在struts.xml中配置即可。

分享到:
评论

相关推荐

    struts2 interceptor annotation plugin

    用注解(annotation)方式配置struts2 (webwork) 中action的拦截器(interceptor)

    使用Annotation和拦截器实现访问控制 (2010年)

    基于数据库和基于配置文件两种方式的访问控制存在如下问题:实现复杂;与类的设计分离,容易产生不一致;实现细粒度较困难等。针对这些问题,结合网络教学系统的开发,提出了一种基于Annotation和拦截器实现访问控制的实现...

    springboot 和一些主流框架的整合的各个基本demo

    Springboot-mybatis-annotation 这是mybatis 的注解版 Springboot-mail 这是springboot 发邮件 Springboot-redis springboot 之使用redis数据库 Springboot-editor.md springboot 与editor.md 整合 Springboot-...

    基于SpringBoot 的图书管理系统

    │ │ │ ├─annotation 自定义注解类 │ │ │ ├─common 公共类 │ │ │ ├─config 配置类 │ │ │ ├─controller 控制层 │ │ │ ├─dao dao层接口 │ │ │ ├─exception 全局统一异常处理 │ │ ...

    [Java参考文档].JDK_API 1.6

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于...

    小程序&微信支付&商城

    annotation 自定义注解 config 全局配置 exception 全局异常 interceptor 拦截器 mall 商城 backstage 运营 controller 控制器 mapper 数据库访问层 service 业务层 littlesoft 小程序 result 返回结果 utils 工具类...

    spring3.2+strut2+hibernate4

    -- 此处hibernate 的映射 采用的是.xml 配置同则应设置具体配置文件名(*.hbm.xml)&lt;/value&gt;--&gt; &lt;/list&gt; &lt;/property&gt; &lt;!-- 事务配置管理 --&gt; ...

    Struts2入门教程(全新完整版)

    10.使用0配置:ZERO Annotation 15 11.Result配置详解 15 探讨type类型: 16 Type类型值 16 作用说明 16 对应类 16 chain 16 用来处理Action链 16 com.opensymphony.xwork2.ActionChainResult 16 dispatcher 16 用来...

    shiro注解版

    -- Support Shiro Annotation 必须放在springMVC配置文件中 --&gt; &lt;!-- 异常处理,权限注解会抛出异常,根据异常返回相应页面 --&gt; class="org.springframework.web.servlet.handler....

    SpringShiro分布式缓存版

    -- Support Shiro Annotation 必须放在springMVC配置文件中 --&gt; &lt;!-- 异常处理,权限注解会抛出异常,根据异常返回相应页面 --&gt; class="org.springframework.web.servlet.handler....

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    JAVA_API1.6文档(中文)

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

    Java 1.6 API 中文 New

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于...

    java api最新7.0

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于...

    autoproxy:注释处理库。 在interfaceabstract类的顶部生成代理类,该代理类可拦截呼叫。 也称为设计模式

    配置依赖关系4.2。 制定代理类规范4.3。 项目中的用法(又名Dagger用法) 4.4。 定制生成的代码5.高级用法(模式) 5.1。 模仿最后一堂课的界面5.2。 副作用5.3。 运行时定义的输出值5.3.1。 跳过内部通话和简单...

    JDK_1_6 API

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于...

    JavaAPI1.6中文chm文档 part1

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

    JavaAPI中文chm文档 part2

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

    [Java参考文档]

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

Global site tag (gtag.js) - Google Analytics