`

Strut2使用拦截器过滤权限问题

阅读更多

JSP请求(login.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	
	<script type="text/javascript">
		function abc(id){
			var buttonObj = document.getElementById(id);
			buttonObj.style.color="red";
		}
		function efg(id){
			var buttonObj = document.getElementById(id);
			buttonObj.style.color="black";
		}
	</script>
	
  </head>
  
  <body>
  	<div style="color:red" align="center">${requestScope.tip}</div>
    <form action="login.action" method="post">
    	<table align="center">
    		<caption><h2>用户登录</h2></caption>
    		<tr>
    			<td style="font-style: inherit;color: green">用户名:<input type="text" name="username" style="color: red;background: #fffddd" /></td>
    		</tr>
			<tr>
				<td style="font-style: inherit;color: green">密&nbsp;&nbsp;码:<input type="password" name="password" style="color: red;background: #fffddd"/></td>
			</tr>
			<tr align="center">
				<td colspan="2"><input id="1" onmouseover="javascript:abc(this.id)" onmouseout="javascript:efg(this.id)" style="color: black" type="submit" value="登录"/>
				<input type="reset" id="2" onmouseover="javascript:abc(this.id)" onmouseout="javascript:efg(this.id)" style="color: black" value="重填" /></td>
			</tr>
    	</table>
    </form>
    <div align="center"><a href="viewBook.action">
	查看图书</a><div>
  </body>
</html>
 

struts.xml文件 
<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<!-- struts是Struts 2配置文件的根元素 -->
<struts>
	
	<package name="login" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="authority" class="com.lbx.interceptor.AuthorityInterceptor" />
		</interceptors>
		
		<global-results>
			<result name="login">/login.jsp</result>
		</global-results>
		
		<action name="login" class="com.lbx.action.LoginAction">
			<result>/success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
		
		<action name="viewBook">
			<!-- 返回success视图名时,转入/WEB-INF/jsp/viewBook.jsp页面 -->
			<result>/viewBook.jsp</result>
			<!-- 拦截器一般配置在result元素之后! -->
			<interceptor-ref name="defaultStack"/>
			<!-- 应用自定义拦截器 -->
			<interceptor-ref name="authority"/>
		</action>
		
	</package>

</struts>
 

User类 
package com.lbx.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;
	}
	
}
 

过滤器(实现AbstractInterceptor接口) 
package com.lbx.interceptor;
import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

@SuppressWarnings("serial")
public class AuthorityInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//取得相关的ActionContext实例
		ActionContext ctx = invocation.getInvocationContext();
		Map session = ctx.getSession();
		
		String user = (String)session.get("user");
		if(user!=null && user.equals("libinxuan")){
			return invocation.invoke();
		}
		ctx.put("tip", "你还没有登录,请输入libinxuan登录系统");
		return Action.LOGIN;
	}

}
 

Action 
package com.lbx.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {

	private String username;
	private String password;

	// 封装处理结果的tip属性
	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;
	}
	@Override
	public String execute() throws Exception {
		Thread.sleep(1500);
		if (getUsername().equals("libinxuan")) {
			ActionContext ctx = ActionContext.getContext();
			Map session = ctx.getSession();
			session.put("user", getUsername());
			return SUCCESS;
		} else {
			return ERROR;
		}
	}

}
 
error.jsp部分代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"  %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'success.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <s:debug></s:debug>
   	您不能登录!<br />
	<a href="viewBook.action">查看图书</a>
  </body>
</html>
 

success.jsp部分代码 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="ss" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'success.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <ss:debug></ss:debug>
  	 您已经登录!<br />
	<a href="viewBook.action">查看图书</a>
  </body>
</html>
 

viewBook.jsp部分代码
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>作者的图书:</title>
</head>
<body>
	<h3>作者的图书:</h3>
	Java<br />
	Java EE<br />
	Ajax<br />
</body>
</html>
 



 

分享到:
评论

相关推荐

    Struts2拦截器实现权限控制demo

    在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

    使用struts2拦截器对登陆权限验证

    在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...

    Struts 2 过滤器和拦截器的区别

    通过对Struts 2框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    Struts2 拦截器

    在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...

    Struts2拦截器的实现原理(csdn)————程序.pdf

    拦截器是基于Java的动态代理机制实现的,它可以看作是一个过滤器,它在Action调用前后执行一些额外的任务,如日志记录、权限检查、数据验证等。在Struts2中,拦截器工作在Action和结果(Result)之间,形成一个拦截...

    struts2 拦截器 权限 ajax jsp

    在这个场景中,我们将重点讨论如何使用Struts2的拦截器来实现权限控制,结合AJAX和JSP技术,为用户提供更流畅的交互体验。 首先,我们了解下Struts2拦截器的工作原理。拦截器就像一个过滤器,位于Action调用之前和...

    struts2拦截器原理

    拦截器是Struts2框架的核心组件之一,用于增强应用的功能,比如权限验证、日志记录、数据校验等。 在Struts2中,每个Action执行前都会经过一系列预定义或自定义的拦截器。这些拦截器按照配置的顺序逐个执行,每个...

    Struts2编写的通用(拦截器,过滤器)Filter

    这个名为"Struts2编写的通用(拦截器,过滤器)Filter"的项目,主要目标是防止用户非法访问未授权的页面,确保只有登录用户才能访问特定的资源。 **拦截器(Interceptor)** 拦截器是Struts2框架的核心特性之一,它...

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    - **拦截器**:在Struts2框架中,拦截器是基于AOP(面向切面编程)的一种设计,主要负责处理请求和响应之间的一系列操作,如日志记录、权限验证、事务管理等。拦截器工作在Action调用之前和之后,形成了一个执行链...

    Struts2 配置登陆拦截器

    在Struts2中,拦截器是实现业务逻辑控制和处理流程的重要组件,它们可以添加额外的功能,如日志记录、权限检查、事务管理等,而不干扰实际的业务操作。本篇文章将详细介绍如何配置Struts2的登录拦截器,以及其背后的...

    浅谈Struts2拦截器的原理与实现.docx

    Struts2还提供了一些抽象类如`AbstractInterceptor`和`MethodFilterInterceptor`,简化了拦截器的实现过程,例如`MethodFilterInterceptor`允许开发者指定要过滤的Action方法。 4. **定义拦截器示例** 下面是一个...

    Struts2自定义拦截器

    拦截器是Struts2的核心特性之一,它们在Action调用之前和之后执行,扮演着类似于过滤器的角色,允许我们实现诸如日志记录、权限检查、事务管理等通用功能。在深入探讨自定义拦截器之前,我们先理解一下Struts2拦截器...

    struts2拦截器的使用

    ### Struts2拦截器的使用 ...使用Struts2的拦截器机制,我们可以轻松地控制用户的访问权限,并实现更加安全的Web应用开发。希望这篇文档能帮助读者更好地理解Struts2拦截器的使用及其在实际开发中的作用。

    12 struts2拦截器

    拦截器是Struts2框架的一个重要组成部分,它们是基于责任链模式实现的,可以看作是过滤器的扩展,提供了更多的控制和灵活性。在请求到达Action之前,一系列的拦截器会按照配置的顺序依次执行,之后在Action执行完毕...

    Java Struts 实现拦截器

    其中,拦截器(Interceptor)是Struts2中的一个关键特性,用于扩展框架的功能,实现诸如事务管理、权限控制、输入验证等功能。 #### Struts2的处理流程 1. **客户端请求**: 当客户端发起HTTP请求时,请求首先到达...

    struts2拦截器

    ### Struts2拦截器详解 #### 一、拦截器的概念与意义 拦截器(Interceptor)在Struts2框架中扮演着至关重要的角色。它的工作原理类似于过滤器(Filter),能够拦截用户请求,并对其进行预处理或者后处理。拦截器...

    Struts权限过滤器

    Struts权限过滤器是Java Web开发中用于控制用户访问权限的关键组件,主要应用于基于Struts 2框架的应用程序。在Struts 2框架中,过滤器扮演着重要的角色,它们在HTTP请求到达Action之前进行拦截,对请求进行预处理,...

Global site tag (gtag.js) - Google Analytics