gpt4 book ai didi

java - 有没有办法在不使用 struts.xml 的情况下重定向到另一个 Action 类

转载 作者:行者123 更新时间:2023-11-30 06:25:02 25 4
gpt4 key购买 nike

我在我的 Struts 应用程序中创建了很多类。我没有检查是否在任何类(class)中登录。相反,我扩展了一个基本操作类。

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

我想要这样的东西:

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>

请帮我找到更好的方法。

最佳答案

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

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();
}
}

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,那么登录的用户对象不仅可以从 session 中使用,而且如果您为用户定义了 getter 或使其受到保护,那么在操作中也可以使用。您必须使 User 对象不可变,这样才不会危及安全功能。

关于java - 有没有办法在不使用 struts.xml 的情况下重定向到另一个 Action 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com