`

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

 
阅读更多
struts2利用拦截器和注解进行权限控制 (二) :JSP页面中根据权限显示或隐藏
http://hi.baidu.com/sonmeika/item/a1955a4699327cd3c0a5921e
新建Annotation,Permission.java:

package cn.itcast.action.privilege;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 权限设置
*
*/
@Retention(RetentionPolicy.RUNTIME) // 代表Permission注解保留的阶段
@Target({ElementType.METHOD}) // 只允许标注在方法上
public @interface Permission {
/** 模块 **/
String module();
/** 权限值 **/
String privilege();
}

权限校验标签 PermissionTag.java:

package cn.itcast.web.taglib;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import cn.itcast.bean.product.ProductType;

/**
* 权限校验标签
*
*/
public class PermissionTag extends TagSupport {
private String module;
private String privilege;

public String getModule() {
  return module;
}
public void setModule(String module) {
  this.module = module;
}
public String getPrivilege() {
  return privilege;
}
public void setPrivilege(String privilege) {
  this.privilege = privilege;
}

@Override
public int doStartTag() throws JspException {
  boolean result = false;
  String auth = module+","+privilege;
  User login = (User)pageContext.getSession().getAttribute("logintest");
  if (null!=login && login.isAuthed(auth)) {
   result = true;
  }
  return result? EVAL_BODY_INCLUDE : SKIP_BODY; // 显示或隐藏标签内的内容

}

}

在web-inf先新建 itcast.tld,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
  
  <description>itcast babasport permission taglib</description>
  <display-name>permission taglib</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>itcast</short-name>
  <uri>http://www.itcast.cn/babasport</uri>

  <tag>
    <description>权限校验标签,有权限就显示标签体的内容,否则不显示</description>
    <name>permission</name>
   <tag-class>cn.itcast.web.taglib.PermissionTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <description></description>
        <name>module</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
        <description></description>
        <name>privilege</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
</taglib>

*.tld的写法可以参考standard.jar\META-INF\*.tld

taglib.jsp:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="http://www.itcast.cn/babasport" prefix="itcast"%>
web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:beans.xml</param-value>
</context-param>
<!-- 对Spring容器进行实例化 -->
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 配置struts2 -->
<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>

<!-- 解决中文乱码问题 -->
<filter>
  <filter-name>encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>


<!-- 使用spring解决hibernate因session关闭导致的延迟加载例外问题 -->
<!--
<filter>
  <filter-name>OpenSessionInViewFilter</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>OpenSessionInViewFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
-->

<!-- 配置过滤器 -->
<!--
<filter>
  <filter-name>PrivilegeFilter</filter-name>
  <filter-class>cn.itcast.web.filter.PrivilegeFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>PrivilegeFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
  -->

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

<jsp-config> 
    <taglib> 
        <taglib-uri>http://www.itcast.cn/babasport</taglib-uri>
        <taglib-location>/WEB-INF/itcast.tld</taglib-location> 
    </taglib> 
</jsp-config>

</web-app>

ProductTypeList.jsp:

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/page/share/taglib.jsp"%>
<html>
<head>
<title>权限组显示</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/css/vip.css" type="text/css">
<SCRIPT language=JavaScript src="/js/FoshanRen.js"></SCRIPT>
</head>

<body bgcolor="#FFFFFF" text="#000000" marginwidth="0" marginheight="0">
  <table width="98%" border="0" cellspacing="1" cellpadding="2"
   align="center">
      <tr ><td colspan="5" bgcolor="6f8ac4" align="right">
       <%@ include file="/WEB-INF/page/share/fenye.jsp" %>
   </td></tr>
   <tr>
    <td width="10%" bgcolor="6f8ac4">
     <div align="center">
      <font color="#FFFFFF">ID</font>
     </div>
    </td>
    <td width="50%" nowrap bgcolor="6f8ac4">
     <div align="center">
      <font color="#FFFFFF">Name</font>
     </div>
    </td>
    <td bgcolor="6f8ac4">
     <div align="center">
      <font color="#FFFFFF">Note</font>
     </div>
    </td>
    <td bgcolor="6f8ac4">
     <div align="center">
      <font color="#FFFFFF">Visible</font>
     </div>
    </td>
    <td width="10%" bgcolor="6f8ac4"></td>
   </tr>
   <!---------------------------LOOP START------------------------------>
   <c:forEach items="${productTypes.resultlist}" var="prodtype">
    <tr>
     <td bgcolor="f5f5f5">
      <div align="center">${prodtype.typeid}</div>
     </td>
     <td bgcolor="f5f5f5">
      <div align="center">${prodtype.name}</div>
     </td>
     <td bgcolor="f5f5f5">
      <div align="center">${prodtype.note}</div>
     </td>
     <td bgcolor="f5f5f5">
      <div align="center">${prodtype.visible}</div>
     </td>
     <td bgcolor="f5f5f5" align="center">
        <itcast:permission module="department" privilege="edit"><!-- 没有权限就不显示“修改”链接-->
      <a href="/product/producttype_editUI.do?productType.typeid=${prodtype.typeid }">修改</a>
      </itcast:permission>
     </td>
    </tr>
   </c:forEach>
   <!----------------------LOOP END------------------------------->
   <tr>
    <td bgcolor="f5f5f5" colspan="5" align="center"><table
      width="100%" border="0" cellspacing="1" cellpadding="4">
      <tr>
       <td width="5%"></td>
       <td width="85%">
        </td>
      </tr>
     </table>
    </td>
   </tr>
  </table>
</body>
</html>
分享到:
评论

相关推荐

    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