背景:如果用户登录后,可以访问action中的所有方法。
user.jsp {
//设置用户为登录状态
}
如果用户没有登录,不允许访问action中的所有方法,并提示“您还没有登录,不能进行访问”
quit.jsp{
//设置用户退出登录
}
user.jsp 设置用户为登录状态
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.getSession().setAttribute("user","siln"); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body>
用户已经登录
</body>
</html>
quit.jsp 设置用户退出登录
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.getSession().removeAttribute("user"); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>退出登录</title>
</head>
<body>
用户已经退出
</body>
</html>
User.java
package cn.itcast.action;
public class User {
private String message;
public String AddUI() {
this.message = "AddUI";
return "success";
}
public String execute() {
this.message = "execute";
return "success";
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
拦截器类
package cn.itcast.interceptor;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
@SuppressWarnings("serial")
public class PermissionInterceptor implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Object user = ActionContext.getContext().getSession().get("user");
if(user != null) {
return invocation.invoke();
}
ActionContext.getContext().put("message", "您还没有登录,不能进行访问");
return "success";
}
}
invocation.invoke()作用:
1.如果拦截器堆栈中还有其他的Interceptor,那么invocation.invoke()将调用堆栈中下一个Interceptor的执行。
2. 如果拦截器堆栈中只有Action了,那么invocation.invoke()将调用Action执行。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.action.extension" value="action,do"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<constant name="struts.multipart.maxSize" value="10701096"></constant>
<package name="base" extends="struts-default">
<global-results>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-results>
</package>
<package name="siln" namespace="/siln" extends="base">
<interceptors>
<interceptor name="permission"
class="cn.itcast.interceptor.PermissionInterceptor" />
<!-- 不要直接将自定义的拦截器给action使用,这样会失去struts2的核心功能,要使用拦截器栈,defaultStack放在前面先执行-->
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="permission"/>
</interceptor-stack>
</interceptors>
<!-- 默认拦截器,该包内的所有action都会使用默认拦截器 -->
<default-interceptor-ref name="permissionStack"/>
<action name="user_*" class="cn.itcast.action.User" method="{1}">
<!-- 若在此处显示调用拦截器,那么默认拦截器就不起作用了,
若想默认拦截器起作用,自己的拦截器也起作用,那么就两个都引用在这里,将默认的放在前面 -->
</action>
</package>
</struts>
这样,拦截器就起作用了,若直接通过action调用,会提示用户“您还没有登录,不能进行访问”,只有先通过user.jsp给sessin设置了值之后,才能进行访问action
分享到:
相关推荐
简单的struts2自定义拦截器 很适合web初学者
Struts2自定义拦截器的配置是Struts2框架中一个非常重要的功能,它允许开发者在Action执行前后插入自定义的逻辑,以实现如权限验证、日志记录、性能监控等多种需求。以下是对标题和描述中涉及的知识点的详细说明: ...
在深入探讨自定义拦截器之前,我们先理解一下Struts2拦截器的基本概念。 拦截器(Interceptor)是基于Java的动态代理机制实现的,它可以拦截用户的请求,对请求进行预处理,并且在Action执行后进行后处理。通过在...
自定义拦截器是Struts2框架中一个非常重要的特性,允许开发者扩展和定制框架的行为,以满足特定的业务需求。这篇博客文章可能是关于如何在Struts2中创建和使用自定义拦截器的教程。 在Struts2中,拦截器是基于责任...
Struts2自定义拦截器实现防止重复提交
自定义拦截器是Struts2框架中扩展功能的重要手段,让我们深入探讨如何在Struts2中实现自定义拦截器。 首先,创建一个Web项目是基础步骤,这可以通过IDE如Eclipse或IntelliJ IDEA来完成。确保你的项目包含了Struts2...
Struts2默认提供了一些拦截器来帮助处理这个问题,但如题目所述,由于性能考虑,项目组决定不使用Struts2的标签,因此需要自定义拦截器来实现防止重复提交的功能。 自定义拦截器的实现主要分为以下几个步骤: 1. *...
本文将深入探讨Struts2的内建自定义拦截器及其配置。 首先,让我们理解什么是拦截器。拦截器是基于AOP(面向切面编程)思想的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都可以执行特定的任务,并且...
在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...
"struts2自定义拦截器的示例代码" 以下是 Struts2 自定义拦截器的示例代码的知识点总结: Struts2 拦截器 소개 Struts2框架提供了拦截器机制,以便在Action执行前后进行拦截和处理。拦截器可以实现各种功能,如...
在这个实例中,我们将探讨如何创建一个自定义拦截器来处理未登录用户的非法请求。 首先,我们需要理解Struts2拦截器的工作原理。拦截器是基于Java的动态AOP(面向切面编程)实现的,它们按照配置的顺序组成一个链,...
自定义拦截器是Struts2中的一个重要特性,允许我们扩展框架的功能,以实现诸如日志记录、权限检查、性能监控等通用任务。在本文中,我们将深入探讨如何创建和使用自定义拦截器。 首先,了解拦截器的基本概念。在...
Struts2学习教程之拦截器机制与自定义拦截器 Struts2框架中,拦截器机制是其重要组成部分,不夸张的说,没有拦截器体系,也就没有这么好用的Struts2框架了。在Struts2框架中,大量的拦截器完成了很多基础的功能,...
本示例将聚焦于如何在Struts2中实现一个自定义拦截器。 首先,我们需要了解拦截器在Struts2中的作用。拦截器是AOP(面向切面编程)的一个核心概念,它允许开发者在动作执行前后插入额外的逻辑,如日志记录、权限...
本项目“Struts2_自定义拦截器_用户权限验证”将深入探讨如何在Eclipse开发环境中,利用Struts2框架自定义拦截器进行用户权限的验证,并处理各个Action之间的跳转。 首先,我们来看自定义拦截器的创建。在Struts2中...
在这个"struts2的自定义拦截器例子"中,我们将深入探讨如何创建和使用自定义拦截器。 首先,拦截器的本质是Java的面向切面编程(AOP)思想在Struts2中的体现。它们允许开发者在动作执行前后插入自定义的逻辑,例如...
本篇将深入讲解如何在Struts2中自定义拦截器,并通过提供的源代码进行分析。 拦截器是Struts2框架的核心组件之一,它允许我们在请求到达Action之前或离开Action之后执行一些额外的操作,如日志记录、权限验证、性能...
自定义拦截器是扩展Struts2功能的重要手段,允许开发者根据项目需求实现特定的行为。 在Struts2中,拦截器是基于责任链模式实现的,它们按照注册的顺序依次执行。拦截器栈是Struts2中拦截器的集合,每个拦截器都...