gpt4 book ai didi

java - 如何跟踪 Struts 2 中所有 URL 的 session

转载 作者:行者123 更新时间:2023-11-29 08:58:06 24 4
gpt4 key购买 nike

这是我的拦截器代码。我的目标是维护所有 URL 的 session ,一旦注销完成,用户将无法访问任何 URL。

import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class AuthenticationInterceptor implements Interceptor {
/**
*
*/
private static final long serialVersionUID = 1L;

public void destroy() {
// TODO Auto-generated method stub
System.out.println("inside the destroy() of interceptor");
}
public void init() {
// TODO Auto-generated method stub
System.out.println("inside the init() of interceptor of new");
}
public String intercept(ActionInvocation ai) throws Exception {
// TODO Auto-generated method stub
System.out.println("inside the interceptor()......new");
if(ai.getAction() instanceof LogoutAction){
Map session = ai.getInvocationContext().getSession();
if (session.get("user")!=null){
System.out.println("inside logout of the session");
return ai.invoke();
}
else{
return "login";
}
}
else
return ai.invoke();

}

这是我的注销操作代码:

 package com.uttara.reg;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class LogoutAction extends ActionSupport implements SessionAware {

private Map session;
public void setSession(Map s) {
session = s;
}

@Override
public String execute() throws Exception {
System.out.println("inside execute() of LA");
if(session.get("user")!=null){
session.remove("user");
return "ridirect";
}
return "failure";
}

}

这是我的另一个操作文件,一旦登录完成用户将注册用户我的问题是如何在此处检查 session

import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport implements SessionAware {
private static final long serialVersionUID = 1L;
public RegisterAction() {
System.out.println("inside the Register action const.");
}
private RegBean bean;
private Map session;
public RegBean getBean() {
return bean;
}
public void setBean(RegBean bean) {
this.bean = bean;
}
@Override
public String execute() throws Exception {
System.out.println("inside execute method");
System.out.println(bean);
Model m = new Model();
String result = m.register(bean);
if(result.equals(SUCCESS))
return SUCCESS;
else{
addActionError(getText(result));
return "failure";
}
}
@Override
public void validate(){
System.out.println("inside validate method");

}
public void setSession(Map session) {
// TODO Auto-generated method stub
System.out.println("inside setSession");
this.session = session;
}

最佳答案

如果您的所有应用程序页面都必须由经过身份验证的用户访问,那么在任何情况下都必须将用户重定向到 login 页面,因为 user 属性不存在他/她的 session 。问题出在您的 if 条件中。我不知道你在 LogoutAction 中做什么,但如果它是通过从他/她的 session 中删除 user 属性来使用户 session 无效,那么你的 if block 应该是这样的:

public String intercept(ActionInvocation ai) throws Exception {
// TODO Auto-generated method stub
System.out.println("inside the interceptor()......new");
Map session = ai.getInvocationContext().getSession();
if ((session.get("user") != null) ||
((session.get("user") == null) && (ai.getAction() instanceof LoginAction)) {
return ai.invoke();
} else {
return "login";
}
}

这样,如果用户没有先通过登录操作,他就没有选择。 LogoutAction 操作只是应用程序中的任何其他操作,可以在用户 session 中有 user 属性的情况下调用。

您的原始 if 语句仅在请求的操作是注销的情况下检查此条件。

关于java - 如何跟踪 Struts 2 中所有 URL 的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19077629/

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