用struts2拦截器实现权限检查

Struts2权限验证拦截器实战教程 本文还有配套的精品资源,点击获取 简介:在Struts2框架中,拦截器是用于增强应用功能的重要组成部分,尤其是权限验证拦截器对于确保应用安全至关重要。该实例将详细阐述如何创建和配置一个权限验证拦截器,通过检查用户登录状态和角色权限来控制访问权限。实例内容可能包括拦截器类、配置文件、Action类、测试用例以及视图文件,全面覆盖权限验证拦截器的设计与实现。学习该实例,开发者可... 阅读详情

login.jsp


<%@ page contentType="text/html; charset=UTF-8" 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>
        
<s: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">
        
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    
-->

    
</head>

    
<body>
        
<div style="color:red">
            
<s:fielderror/>
        
</div>
        
        
<s:form action="login" theme="simple">
            
<table align="center" width="60%">
                
<tr>
                    
<td align="right">
                        Name:
                    
</td>
                    
<td>
                        
<s:textfield name="name" />
                    
</td>
                    
<td>
                        
<s:submit value="Submit" />
                    
</td>
                
</tr>
                
<tr>
                    
<td align="right" colspan="3">
                        
<a href="welcome.action">Go to welcome page directly.</a>
                    
</td>
                
</tr>
            
</table>
        
</s:form>
    
</body>
</html>

welcome.jsp


<%@ page contentType="text/html; charset=UTF-8" 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>
        
<s: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">
        
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    
-->

    
</head>

    
<body>
        
<s:form action="logout" theme="simple">
            
<h2>
                Welcome!
            
</h2>
            
<table align="center" width="60%">
                
<tr>
                    
<td>
                        Name:
                    
</td>
                    
<td>
                        
<s:property value="#session['USER_INFO'].name" />
                    
</td>
                
</tr>

                
<tr>
                    
<td>
                        Login Time:
                    
</td>
                    
<td>
                        
<s:property value="#session['USER_INFO'].loginTime" />
                    
</td>
                
</tr>

                
<tr>
                    
<td>
                        
<s:submit value="Logout" />
                    
</td>
                    
<td>
                        
<a href="login.action">Back to login.</a>
                    
</td>
                
</tr>
            
</table>
        
</s:form>
    
</body>
</html>
struts.xml
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
    
<include file="struts-default.xml" />

    
<!-- 定义含“权限检查拦截器”的包,供其他模块引用 -->
    
<package name="struts-default-with-auth-check" extends="struts-default">
        
<interceptors>
            
            
<!-- 定义“权限检查拦截器” -->
            
<interceptor name="authCheck"
                class
="interceptor.AuthCheckInterceptor">
            
</interceptor>
            
            
<!-- 定义含“权限检查拦截器”的拦截器栈,注意缺省的拦截器栈“defaultStack”要放在前面 -->
            
<interceptor-stack name="myStack">
                
<interceptor-ref name="defaultStack" />
                
<interceptor-ref name="authCheck"></interceptor-ref>
            
</interceptor-stack>
        
</interceptors>
        
        
<!-- 正式应用可能含很多package,为了能从其他package中跳转到登录页面,把登录页面定义成全局result -->
        
<default-interceptor-ref name="myStack"></default-interceptor-ref>

        
<global-results>
            
<result name="globalLogin">login.jsp</result>
        
</global-results>
    
</package>


    
<!-- >>>>>>>>>>>>>>>>>>>>>> p1模块 <<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
    
    
<!-- 注意package的extends属性,系统中只有“登录/注销”操作不需要检查权限 -->
    
<package name="p1" extends="struts-default">
        
<!-- 登录 -->
        
<action name="login" class="action.LoginAction">
            
<result>welcome.jsp</result>
            
<result name="input">login.jsp</result>
        
</action>

        
<!-- 注销 -->
        
<action name="logout" class="action.LogoutAction">
            
<result>login.jsp</result>
        
</action>
    
</package>
     
    
<!-- >>>>>>>>>>>>>>>>>>>>>> p2模块 <<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
    
    
<package name="p2" extends="struts-default-with-auth-check">
        
<!-- 试图未经过登录,直接访问welcome页面,测试用 -->
        
<action name="welcome" class="action.WelcomeAction">
            
<result>welcome.jsp</result>
        
</action>
    
</package>

</struts>
LoginAction.java
package action;

import java.util.Date;
import java.util.Map;

import bean.LoginedUser;

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

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

    
private String name;

    
private static final long serialVersionUID = -2907891170345505600L;

    @ Override
    
public String execute() throws Exception {
        Map session 
= ActionContext.getContext().getSession();
        LoginedUser user 
= new LoginedUser();

        user.setName(name);
        user.setLoginTime(
new Date());

        
if (name.startsWith("U_")) {//假设用户名以"U_"开头才是合法的
            session.put("USER_INFO", user);//只有此处会向session里面加入key=“USER_INFO”的对象
            return SUCCESS;
        }
 else {
            addFieldError(
"name", "name is invalid.");
            
return INPUT;
        }

    }


    
public void validate() {
        
if (null == name || name.trim().length() < 1) {
            addFieldError(
"name", "name is required.");
        }

    }


    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }


}

LogoutAction.java
package action;

import java.util.Map;

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

@ SuppressWarnings ( 
"unchecked" )
public class LogoutAction extends ActionSupport {

    
private static final long serialVersionUID = -2907891170345505600L;

    @ Override
    
public String execute() throws Exception {
        Map session 
= ActionContext.getContext().getSession();

        
if (null != session.get("USER_INFO")) {// 刪除session中key="USER_INFO"的對象
            session.remove("USER_INFO");
        }


        
return SUCCESS;//注销完毕,回到登录页面
    }


}

WelcomeAction.java
package action;

import com.opensymphony.xwork2.ActionSupport;

@ SuppressWarnings ( 
"unchecked" )
public class WelcomeAction extends ActionSupport {

    
private static final long serialVersionUID = -2907891170345505600L;

    @ Override
    
public String execute() throws Exception {
        
return SUCCESS;
    }

}

AuthCheckInterceptor.java
package interceptor;

import java.util.Map;

import bean.LoginedUser;

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

@ SuppressWarnings ( 
"unchecked" )
public class AuthCheckInterceptor extends AbstractInterceptor {

    
private static final long serialVersionUID = -4535462154177128320L;

    @ Override
    
public String intercept(ActionInvocation ai) throws Exception {
        
        Map session  
= ActionContext.getContext().getSession();
        LoginedUser user 
= (LoginedUser)session.get("USER_INFO");
        
        
if(null==user){// 判断session里是否有key="USER_INFO"的对象
            return "globalLogin";// 转发到登录页面
        }

        
return ai.invoke();
    }


}


struts令牌token实例 简单的struts2令牌token实例 方便应用 不懂token也可以参考学习 主要用于解决重复提交的问题 立即下载

相关推荐

STM32串口调试踩坑记:HAL_UART_ErrorCallback里不先解锁,你的中断接收就废了

本文深入分析了STM32串口调试中HAL_UART_ErrorCallback的锁机制陷阱,指出在错误回调中不先解锁会导致中断接收失效的问题。通过解析HAL库源码,提出了正确的错误处理实现方法,并分享了预防措施与最佳实践,帮助开发者提升串口通信的可靠性。

weixin_33733810的博客 513

struts2 使用拦截器 实现用户权限的验证

1、编写实现拦截验证的类              package iterceptor;import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvoca

韦庆礼的专栏 java C# .NET JSP 2109

OpenCV卡尺工具实战:5步搞定工业级圆与直线拟合(附完整C++源码)

本文详细介绍了使用OpenCV卡尺测量工具实现工业级圆与直线拟合的5个关键步骤,包括核心原理、环境配置、边缘点提取优化、鲁棒性几何拟合实现及QT集成技巧。通过模块化C++源码和实战案例,帮助开发者快速掌握高精度尺寸测量技术,适用于机械零件、PCB板等工业检测场景。

uran的专栏 843

struts2 角色权限 filter(过滤器)和interceptor(拦截器)

之前的Struts2项目通过再Sitemesh的母版页中使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这 种现仅仅在view层进行,如果未登录用户直接在地址栏输入登录用户才能访问的地址,那么相应的action还是会执行,仅仅是不让用户看到罢了。这样显 然是不好的,所以研究了一下Struts2的权限验证。Here i quote 权限最核心的是业务逻

jazywoo_在路上 6103

压电阀控制器设计-总章

本文章用于回顾记录本人制作压电阀控制器的关键技术,本人所制作压电阀控制器已经上市得到应用,特在此对一些关键技术进行回顾记录,欢迎从事压电控制及压电阀相关人员一起讨论

qq_42712859的博客 849

uniapp - 实现APP后台持续定位+手机息屏后能持续上传位置信息数据,详解后台保活持续运行+手机锁屏保证后台持续/实时定位的解决方案及示例源码(完美兼容安卓android与苹果ios系统手机)

使用uniapp开发app实现后台保活定位能力,uniapp实时定位保活 息屏定位后台运行,uniapp APP实时定位高德 后台运行 支持锁屏息屏运行,持续获取定位信息,uniapp App端后台间隔时间发送定位功能实现,UniApp实现手机应用常活,固定时间内上传手机位置信息,后台(或锁屏)持续/实时定位的实现方案,uni-app后台持续定位,锁屏后能持续上传位置信息,实现后台定位持续无限制定位高德定位,百度定位,UniApp后台持续定位保如何在APP退到后台时保持定位服务,uniapp 切换app仍能

🏆 前端领域优质创作者 1万+

Struts2 权限验证 ---拦截器和过滤器

之前的Struts2项目通过再Sitemesh的母版页中使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这种现仅仅在view层进行,如果未登录用户直接在地址栏输入登录用户才能访问的地址,那么相应的action还是会执行,仅仅是不让用户看到罢了。这样显然是不好的,所以研究了一下Struts2的权限验证。Here i quote 权限最核心的是业务逻辑,具体用什

朕是白白编码小王子 736

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

Struts2使用过滤器和拦截器进行简单权限校验

在一些用到用户登录的目录应该进行权限判断,以防非法登录,我在这里进行一个简单的权限校验。1.使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤器配置:    filter>        filter-name>access filterfilter-name>        filter-class>            com.test.news.util.Ac

超乎想像 3972

29.Labview界面设计 --- (下篇)自定义控件库、界面布局与外观设计

1.自定义控件外观(自定义控件)1.1 自定义外观库1.2 手动自定义控件外观2. 前面板控件布局方式(控件排布)2.1 模块化控制布局方式2.2 数据采集布局方式3. 前面板外观优化项(背景设计)3.1 前面板背景设计3.2 前面板窗口整理本节第一部分教大家安装一种可以直接用的自定义控件库,第二部分教大家如何自己设计控件并保存调用。

关注我,更多技术问题欢迎私聊~ 4782

智能硬件产品:做好一款电子硬件产品,工具必不可少

上到战略规划,中至运营策略,下至人性洞察,。最初做产品时,笔者从一开始就陷入到了对工具的痴迷,包括:PS、AutoCAD、PROE、犀牛、Axure、Keyshot、Altium……大概将 2 个多月的时间和精力都消耗在了学习使用工具上。通过工具的运用也确实提高了工作效率,在仅有创意的前提下通过灵活运用工具,一年内便成功申请了多个实用新型专利、设计了多款产品的高保真原型图等。正在上传…重新上传取消。

产品线负责人 1443

Struts2 自定义拦截器 实现简单权限检查

自定义struts2.xml中需要定义interceptors和全局结果集: <interceptor name="login" class="com.itbbs.filter.LoginFilter"> <interceptor-ref name="login"> <interceptor-ref name="defaultStack"> <defau

chengchanglun'Blog 982

华为OD机试真题 新系统2026-04-08 Python&JS 实现【直捣黄龙】

小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个哨兵警戒以自己为中心的9宫格,一旦被哨兵发现则行动失败。

MISAYAONE的博客 588

使用Struts2的拦截器实现权限控制

这段时间在学习一本新书——《struts2权威指南》(李刚著),现在看到“使用拦截器完成权限控制”,就仿照着做了一个例子,以巩固知识。如下: 1 实现权限控制拦截器 本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用。因

Kevin‘s blog 524

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用拦截器完成权限控制

权限检查拦截器类的代码如下: package org.crazyit.app.interceptor; import com.opensymphony.xwork2.*; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import java.util.*; //权限检查拦截器继承AbstractInterc

fangchao3652 1342

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

struts2 拦截器实现登录权限控制

使用struts2的拦截器实现简单的登录权限拦截,非常简单。 首先在登录action给session设置username或者其他表示登录用户的值,作为在拦截器中判断是否登录的根据。 比如我的loginAction,重点是session.put("username", thisUser.getUsername());在session中这是一个username的值为当前登录用户的用户名。只要在拦截...

renhq 820

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Struts2之拦截器

目录标题

Atkx's Blog 2774

Struts2拦截器Filter

拦截器 拦截器Filter是Struts2的核心。 Struts2的拦截器与Servlet中的过滤器相似。 在执行Action的execute()方法之前,Struts2先执行struts.xml中引用的拦截器,在执行完所有引用的拦载器的doIntercept()方法后,会执行Action的execute()方法。在Struts2的拦截器体系中,Struts2的内建拦截器完成了该框架的大部分操作,...

weixin_43710113的博客 1415

struts2中使用session和拦截器控制权限

1.在登录的session中设置一个属性。      在登录的action中的execute方法中加入以下代码。      @SuppressWarnings("unchecked") public String execute() throws Exception { if ("dj".equals(this.getUsername().trim())

魏同学不会讲故事 1090

Struts2的interceptor实现权限管理

这是以前写过的一个利用struts2的interceptor进行权限管理的笔记,以前是放电脑上的,今天偶然看到了,就贴出来,希望能对有需要的人有点帮助,同时自己以后需要看的时候也会更加方便点!   说明一点:这个interceptor里面的代码是根据我特定的项目写的,所以请有需要的人不要盲目的照搬!   自己写一个interceptor,该interceptor继承interceptor接口,

我本善良 569

在Struts中基于Spring的AOP MethodInterceptor(拦截器)的权限验证

<br />本程序是关于"某考试系统"中的aop应用.说实话,aop在spring应该算是个难点,它主是起到了"代理"的作 用,aop会为你调用的方法的对象生成代理,这个代理是继承调用 MethodInterceptor这个拦截器的对象的,所以,具备原有对象的所有方法与特性.AOP不神秘,它就是EJB的进化,只是EJB需要显式的实现接 口,而AOP不用,它会自动帮你生成代理,来做很多事情,AOP,我觉得它在处理事务 的时候用的比较多所谓声明式的事务就是由此而来. 当系统管理员进行后台管理或考生前台进

The 优快云 Blog With Matol Poet ! 3283

struts2 注解配置拦截器 实例

struts2 注解配置拦截器 实例

hgffhh的博客 363

Struts2 配置拦截器

1.自定义拦截器类 package com.baizhi.interceptor; import org.apache.struts2.ServletActionContext; import com.baizhi.entity.Admin; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.x...

qq_42191775的博客 258

java struts 2 使用拦截器完成权限控制

java struts 2 使用拦截器完成权限控制 博客分类:  Struts2.0 JavaStruts应用服务器浏览器JSP 这段时间在学习一本新书——《struts2权威指南》(李刚著),现在看到“使用拦截器完成权限控制”,就仿照着做了一个例子,以巩固知识。如下:  1 实现权限控制拦截器  本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某

liuzheng2684的专栏 2314

struts2自定义拦截器

用于拦截用户是否已登录的拦截器,若用户已登录则允许进行文件上传,否则提示“你无权进行此操作” PermissionInterceptor.java: package blog.interceptor; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.Ac...

SYL269794967的博客 158
下一篇: 让Eclipse/MyEclipse的控制台和log4j日志支持多种颜色
danielxxxxx
博客等级 码龄19年 3粉丝 5原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值