有没有办法重定向到另一个 Action 类而不使用 struts.xml

2023-11-27

我在 Struts 应用程序中创建了许多类。我没有检查任何课程是否登录状态。相反,我扩展了一个基本动作类。

现在我想在我的基本操作中创建一个预处理程序来检查登录情况并在未登录时进行重定向。

我想要这样的东西:

public BaseAction(){
  if(isLoggedIn){
    //go to child which was called
   }
   else {   //redirect to login page
  }          
}

另一种方法是检查isLoggedIn()通过在所有操作类中调用此方法并定义一个全局结果,例如

<result name="not-logged-in" type="redirectAction">Login.action</result>

请帮助我找到更好的方法。


看起来您想签入基本操作类的构造函数,但您错了。对象工厂使用构造函数来实例化您的操作实例。在此阶段,您可以使用一些东西。在你的情况下这是错误的。另一种方法是将逻辑移至方法中execute()并打电话super.execute()在任何方法调用起作用之前,但是如果您忘记将超级调用放入操作中,那么您最终可能会导致操作代码运行时未经身份验证。为了防止这种情况发生,您应该在执行任何操作之前运行代码,并且能够访问操作实例或操作上下文,使其更加 Struts2。我猜你没读过这本书Struts 2 实际应用所以我会给你一些我自己的想法。这是关于创造AuthenticationInterceptor以及实施的行动UserAware它将登录的用户注入到实现此接口的操作中。拦截器看起来像

public class AuthenticationInterceptor implements Interceptor {

public void destroy() {
}

public void init() {
}

public String intercept(ActionInvocation actionInvocation) throws Exception {
    Map session = actionInvocation.getInvocationContext().getSession();
    User user = (User) session.get(Struts2MyConstants.USER);
            
    if (user == null) {
        return Action.LOGIN; //login required result
    }               
    else {              
        Action action = (Action)actionInvocation.getAction();
        
        if (action instanceof UserAware) {
            User freshUser = myService.getUser(user.getId());
            ((UserAware)action).setUser(freshUser);
        }
        
        System.out.println("Logged in: interceptor");
        return actionInvocation.invoke();
    }
}

The UserAware看起来像

public interface UserAware {
    
    public void setUser( User user );
    
}

并创建一个安全的默认堆栈来引用任何操作

<interceptors>
  <interceptor name="authenticationInterceptor" class="org.yourapp.struts.interceptor.AuthenticationInterceptor"/>
  <interceptor-stack name="secureStack">
    <interceptor-ref name="authenticationInterceptor"/>
    <interceptor-ref name="defaultStack"/>
  </interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureStack"/> 

如果您采取基本行动来实施UserAware那么,如果您为用户定义 getter 或使其受到保护,则登录的用户对象不仅可以从会话中使用,而且可以在操作中使用。你必须做User对象不可变,这样就不会损害安全功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法重定向到另一个 Action 类而不使用 struts.xml 的相关文章

  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • IBM Websphere MQ - 用于 Tomcat 部署的 EJB 和 MDB 迁移

    我已经为此苦苦挣扎了很长一段时间 我有一个 IBM Websphere MQ 它使用 EJB 和 MDB 以下是配置ejb mdb的地方
  • 在java代码中创建postgresql表

    我有一个与 postgreSQL 数据库连接的 java 代码 现在 我希望当它连接到数据库时 我还将创建数据库表 但我的问题是 它不会创建数据库 我不知道问题是什么 这是我的代码 Statement st null ResultSet r
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • 如何重复一段文本中的每个字母?爪哇语

    就像在口吃中一样 如果文本为 dean 并且乘数为 3 则结果将是 dddeeeaaannn 由提供的乘数指定的次数 public static void repeatLetters String text dean int n 3 Str
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • 如何检查单词是否在wordNet中

    我开始了解wordNet直到我知道我找到了synonymous对于一个特定的词 现在我有一个文件 我想使用标记化该文本n gram例如 String s I like to wear tee shirt 使用后n gram这将是 I lik
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • Java 8:如何创建毫秒、微秒或纳秒的 DateTimeFormatter?

    我需要创建格式化程序来解析具有可选的毫秒 微米或纳秒分数的时间戳 例如 对于我的需求 我看到以下机会 DateTimeFormatter formatter new DateTimeFormatterBuilder append DateT
  • 向Java类库添加函数

    我使用的 Java 类库在很多方面都不完整 有很多类我认为应该内置其他成员函数 但是 我不确定添加这些成员函数的最佳实践 让我们调用不足的基类A class A public A long arbitrary arguments publi
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • 如何更改 JAX-WS Web 服务的地址位置

    我们目前已经公开了具有以下 URL 的 JAX RPC Web 服务 http xx xx xx xx myservice MYGatewaySoapHttpPort wsdl http xx xx xx xx myservice MYGa

随机推荐

  • 在 Python 中创建唯一对象的列表

    可以像这样在 Python 中 填充 数组 gt 0 10 0 0 0 0 0 0 0 0 0 0 我想使用这个示例原理来快速创建相似对象的列表 gt a key value 3 gt a key value key value key v
  • Intellij IDEA 如何管理插件依赖关系?

    使用 Intellij IDEA 插件一段时间后 我注意到具有外部依赖项的插件工作正常 即使这些依赖项没有与插件本身捆绑在一起 也没有在任何地方公开声明 随机选取一个例子 生成字符串插件依赖于 log4j 等 但是 如果您查看 jar 文件
  • 当应用程序位于前台且带有传入 OneSignal 推送通知时,如何防止发出警报?

    当我的应用程序位于前台时 会出现一条警报 如何防止在接收推送通知时出现这种情况 In your didFinishLaunchingWithOptions的方法AppDelegate你必须添加kOSSettingsKeyInAppAlert
  • 可应用于每个 UITextField 的自定义类 - Swift

    我对编程非常陌生 正在制作一个包含许多 UITextField 的项目 我想让文本字段只在底部有一个边框 以获得更清晰的外观 我在这里找到了一些应该可以实现这一点的代码 let border CALayer let width CGFloa
  • 验证 PowerShell PSCredential

    假设我有一个PSCrendential我使用 PowerShell 创建的对象Get Credential 如何根据 Active Directory 验证输入 现在我找到了这种方法 但我觉得它有点难看 void System Reflec
  • *ngIf 和 [hidden] 有什么区别?

    假设我对照 和 表达式进行检查 那么这两个不是相同的吗 div val div div val div 它们之间实际上存在性能差异 ngIf如果表达式为 false 将注释掉数据 这样 数据甚至不会加载 从而导致 HTML 加载速度更快 h
  • Spark:如何在数据帧上执行 dropDuplicates,同时保留最高时间戳行[重复]

    这个问题在这里已经有答案了 我有一个用例 我需要删除数据帧的重复行 在这种情况下 重复意味着它们具有相同的 id 字段 同时保留具有最高 时间戳 unix 时间戳 字段的行 我找到了 drop duplicate 方法 我正在使用 pysp
  • 将数据框列名称从字符串格式更改为日期时间

    我有一个数据框 其中列的名称是字符串形式的日期 年月 如何将这些名称转换为日期时间格式 我尝试这样做 new cols pd to datetime df columns df df new cols 但我收到错误 KeyError Dat
  • 根据 MSVC++ 中的 unicode 设置自动在 std::string 和 std::wstring 之间更改?

    我正在编写一个 DLL 希望能够在 MSVC 2010 中的 unicode 和多字节设置之间切换 例如 我使用 T string and LPCTSTR and WIN32 FIND DATA而不是 W 和 A 版本等 现在我想要 std
  • 捕获异步操作的异常

    我在这里阅读有关异步的更多信息 http msdn microsoft com en us library hh873173 v vs 110 aspx 看看这个例子 Task
  • 非凸多边形内最大的圆

    如何找到可以容纳在凹多边形内的最大圆 只要能够实时处理具有约 50 个顶点的多边形 暴力算法就可以 解决这个问题的关键是首先进行观察 适合任意多边形的最大圆的中心是以下点 多边形内部 和 距多边形边缘上任意点最远 为什么 因为圆的边缘上的每
  • F# 中的第一个或默认值

    如何在 F 中编写 FirstOrDefault Linq 查询 我可以在 F 中完全使用 linq to sql 吗 请注意 F 中更惯用的方法可能是使用类似于Seq tryFind而不是使用 LINQ 运算符 尽管它不是替代品 因为它返
  • mongodb 转储多个集合或排除集合版本 2.6

    如何转储多个集合或排除 mongodump 上的集合 mongodb是2 6版本 我现在就是这样做的 mongodump collection map accounts clicks out dumps 您可以使用 排除集合从 MongoD
  • 如何在Python中使用点表示法表示字典?

    我对 python 很陌生 我希望我能做到 访问 a 值的表示法dict 可以说我有test像这样 gt gt gt test dict gt gt gt test name value gt gt gt print test name v
  • 如何使用 faces-redirect 进入 JSF 2.2 流程

    我有一个基本的流程示例 src main webapp index xhtml flow1 flow1 flow xml flow1 xhtml index xhtml 有一个简单的形式 使用参数进入流程
  • 如何修复“客户端身份验证方案‘匿名’禁止 HTTP 请求”

    我在实现与 WCF 服务通信的客户端时遇到一些问题 它是由另一家公司托管的 WCF 因此我无权访问其代码 我使用 Visual Studio 中的连接服务提供程序工具生成客户端代码 以便我可以发出请求 并且一切都在我的本地计算机上正常运行
  • 为什么 npm 将本地包安装在我的主目录中?

    Node js 新手 Windows 10 我npm install ed 一些软件包 没有 g 而在没有的目录中package json npm 将包放入C Users MyName node modules 现在我看到一些奇怪的行为 当
  • 在类中使用 es6 箭头函数[重复]

    这个问题在这里已经有答案了 当我改变一个函数时draw to draw gt 我收到类似 Uncaught SyntaxError Unexpected token 的错误 可能是什么原因 首先 你可能不应该这样做 为什么 嗯 因为箭头函数
  • 将源代码管理中的更改提交到多个分支的实用方法

    使用源代码控制时的常见场景是拥有开发分支和版本化发布分支 我们使用 CVS 以 HEAD 作为开发分支 并命名一个分支 例如 release 6 2 表示产品的当前版本 新功能的开发仅进入开发分支 但错误修复有时必须同时检查到开发分支和当前
  • 有没有办法重定向到另一个 Action 类而不使用 struts.xml

    我在 Struts 应用程序中创建了许多类 我没有检查任何课程是否登录状态 相反 我扩展了一个基本动作类 现在我想在我的基本操作中创建一个预处理程序来检查登录情况并在未登录时进行重定向 我想要这样的东西 public BaseAction