`
vtrtbb
  • 浏览: 360447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2利用拦截器和注解进行权限控制

    博客分类:
  • java
阅读更多

 

基本是在每个方法上加入注入来进行控制,有点像asp 脚本语言

package auth;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)//指定该注解是在运行期进行
@Target({ElementType.METHOD})//指定该注解要在方法上使用
public @interface AuthName {
  String value() default "";
}

 

 

 

package auth;
import java.lang.reflect.Method;

public class ParseAuthName {

	public static String parseAuthentication(Class<?> clazz, String methodName,Class<?>... parameterTypes) throws NoSuchMethodException {
		//根据方法名,取得方法,如果有则返回
		Method method = clazz.getMethod(methodName, parameterTypes);
		if (null != method) {
			AuthName authName = method.getAnnotation(AuthName.class);
			if (null != authName) {
				return authName.value();
			}
		}
		return null;
	}
}

 

 

下面是struts的拦截器

package auth;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;


public class AuthInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		ActionContext context = invocation.getInvocationContext();
		String user = (String)context.getSession().get("user") == null ? "tom" : "tom";			
		ActionProxy proxy = invocation.getProxy();
		String methodName = proxy.getMethod();
		Object action = proxy.getAction();
		String auth = null;		
		try{
			auth = ParseAuthName.parseAuthentication(action.getClass(),methodName, null);
		}catch(NoSuchMethodException  ex) {
			ex.printStackTrace();
						           return "nopermisses";
		}
		if (null != auth) {
			if ("AUTH".equals(auth)) {
				return invocation.invoke();
			}
		}
		return "nopermisses";		
	}

}

 

 

写一个action进行测试:

public class UserListAction extends ActionSupport{	
	@AuthName(value = "admin")	
	public String execute() {
		return SUCCESS;
	}

}

 

 

struts.xml文件基本配置:

 

<?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="system" namespace="/admin"	extends="struts-default">
		<interceptors>
			<interceptor name="auth" class="auth.AuthInterceptor"></interceptor>
			<interceptor-stack name="authdefault">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="auth"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="authdefault"></default-interceptor-ref>
		
		<action name="author" class="action.UserListAction" >
            <result name="success">/default.jsp</result>
            <result name="nopermisses">/sss.jsp</result>                       
        </action>
	</package>
</struts>

 web.xml文件 ,我用的是tomcat7 + servlet3.0

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
      
   
	<filter>
    <filter-name>struts-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
  </filter>
  
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
     <init-param> 
    <param-name>actionPackages</param-name>                 
    <param-value>action</param-value> 
    </init-param> 
  </filter>
  
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
    <filter-name>struts-cleanup</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	

	


</web-app>

 

分享到:
评论

相关推荐

    Struts2拦截器及其用法详细说明

    Struts2是一个强大的Java web开发框架,它提供了一种组织和控制MVC(模型-视图-控制器)架构的方式。在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截...

    Struts2 拦截器注解(二十七)

    在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的配置和使用。 首先,让我们理解什么是Struts2的拦截器。拦截器是一个实现了`Interceptor`接口的Java类,它在Action执行之前或之后执行...

    Struts2权限控制

    在Struts2中,拦截器扮演着至关重要的角色,它们是实现业务逻辑和控制流程的核心组件。本知识点主要聚焦于如何利用Struts2的拦截器进行权限控制。 **一、Struts2拦截器原理** 在Struts2中,拦截器是基于Java的动态...

    Struts2拦截器源码

    Struts2是一个强大的MVC(模型...通过理解和研究Struts2的拦截器源码,我们可以更好地利用这个强大工具,提高应用的可扩展性和灵活性。同时,这也为我们提供了对Struts2框架内部运作的深入了解,有助于优化和调试代码。

    Struts2学习案例(拦截器)

    在本学习案例中,重点在于Struts2的拦截器(Interceptor)功能,这是Struts2的核心特性之一,它允许开发者在Action执行前后进行自定义处理,实现了灵活的业务逻辑控制和增强的功能。 首先,我们来理解一下什么是...

    struts2 拦截器实例

    3. **配置拦截器**:拦截器可以通过Struts2配置文件或注解进行配置,指定在哪些Action上使用哪些拦截器。 ### 二、单个Action配置拦截器实例 1. **创建拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的...

    struts2中拦截器的使用

    包中定义了3个主要的拦截器注解类型:`@Before`、`@After`和`@Around`. 这些注解允许你在Action类或者方法上直接定义拦截器,无需在配置文件中声明。 1. `@Before`注解:此注解标记的方法会在Action执行之前被调用...

    一个Struts2的核心拦截器例子

    核心拦截器是Struts2框架的重要组成部分,它们允许开发者在动作执行前后插入自定义逻辑,以实现如日志、权限验证、数据校验等常见功能。下面将详细讲解Struts2的核心拦截器以及如何在项目中使用它们。 1. **Struts2...

    使用struts拦截器+注解实现日志审计功能

    本文将详细介绍如何利用Struts拦截器和注解来实现日志审计功能。 首先,我们需要了解Struts拦截器的工作原理。拦截器是基于Java的动态代理模式实现的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都...

    利用struts2拦截器做的简单登录

    本文将深入探讨如何利用Struts2的拦截器实现简单的登录功能。拦截器是Struts2框架的核心组件之一,它允许我们在动作执行前后插入自定义逻辑,比如权限验证、日志记录等。 首先,我们来理解一下Struts2拦截器的工作...

    Struts2 拦截器 和 Java 中的动态代理

    总结来说,Struts2拦截器是实现业务逻辑增强和控制流程的重要组件,它基于Java的动态代理机制。通过在Action执行前后插入自定义代码,拦截器使得我们可以方便地进行如日志记录、权限验证等操作,而无需直接修改...

    struts2学习笔记十(第10讲.Struts2的核心 拦截器)

    在Struts2中,拦截器扮演着至关重要的角色,它们是实现业务逻辑和控制流程分离开来的重要组件。本篇将深入探讨Struts2的核心拦截器以及其工作原理。 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过...

    struts2自定义拦截器

    Struts2是一个强大的Java web应用程序框架,它提供了一种组织和控制MVC(模型-视图-控制器)架构的方式。在Struts2中,拦截器是实现业务逻辑和表示层之间解耦的关键组件,允许开发者在请求处理之前或之后执行额外的...

    ssm配置及struts文件,拦截器.zip

    拦截器是Struts2的核心特性之一,它们是围绕Action执行的一系列拦截动作,可以在请求到达Action之前或之后进行预处理和后处理。自定义拦截器可以实现如日志记录、权限验证、性能统计等多种功能。通过在struts.xml中...

    反射和注解的妙用-struts2权限的控制

    本文将详细介绍如何利用Java反射和自定义注解来实现在Struts2框架中的方法级别权限控制。 #### 二、核心概念简介 **1. Struts2框架** Struts2是一个基于Java的开源Web应用程序框架,它继承了Struts1的优良特性,...

    Struts2内置拦截器简介

    Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...

    基于ssh拦截器框架Struts2拦截器的登录验证实现

    SSH2 框架中的 Struts2 拦截器功能允许开发者在特定操作执行前或执行后进行自定义处理,例如登录验证、权限检查等。在本文中,我们将探讨如何使用 Struts2 的拦截器来实现登录验证功能。 首先,我们需要了解 Struts...

    Struts2简单的拦截器示例

    这个“Struts2简单的拦截器示例”是为初学者设计的,旨在帮助理解如何在Struts2中创建和使用拦截器。 首先,我们来理解什么是拦截器。在Struts2中,拦截器是一个实现了`Interceptor`接口或者继承自`...

    struts2拦截器

    Struts2 拦截器是其核心特性之一,它基于Apache的拦截器模式实现,为应用程序提供了灵活的控制流程,使得在Action调用前后可以插入自定义的处理逻辑。Struts2 框架通过拦截器实现了MVC模式中的业务逻辑与表示层的...

    Struts2框架及注释和用法

    拦截器是Struts2的一大特色,它们在Action执行前后进行额外处理,如日志记录、权限检查等。常见的拦截器有ValidationInterceptor(字段验证)、PrepareInterceptor(初始化Action属性)和ResultInterceptor(处理...

Global site tag (gtag.js) - Google Analytics