gpt4 book ai didi

java - 重定向到原始页面不起作用

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

我正在尝试创建 Wicket 7.8.0 应用程序,除了页面重定向到登录前访问的原始页面之外,一切正常。

每当我尝试在未登录的情况下访问安全页面时,我都会正确重定向到登录页面,但一旦登录,我就会被重定向到主页而不是原始页面。

这是我的应用程序类:

public class MyApplication extends AuthenticatedWebApplication {

...

@Override
public void init() {
super.init();

MetaDataRoleAuthorizationStrategy.authorize(HomePage.class, "TEST_ROLE");
MetaDataRoleAuthorizationStrategy.authorize(SecuredPage.class, "TEST_ROLE");

this.mountPage("signin", SignInPage.class);
this.mountPage("homepage", HomePage.class);
this.mountPage("secured/secured", SecuredPage.class);
//this page is secured with annotations
this.mountPage("secured/another", AnotherSecuredPage.class);

this.getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
}
}

为了登录,我使用了非常简化的登录页面:

public class SignInPage extends WebPage {

private String username;
private String password;

private static final long serialVersionUID = 8096706227164750788L;

public SignInPage() {
this.add(new FeedbackPanel("feedback"));
final Form<SignInPage> form = new Form<>("form");
form.add(new TextField<>("username", new PropertyModel<String>(this, "username")));
form.add(new PasswordTextField("password", new PropertyModel<String>(this, "password")));
form.add(new SubmitLink("submit") {

private static final long serialVersionUID = 6057698894229534492L;

@Override
public void onSubmit() {
final Session session = SignInPage.this.getSession();
if(session.signIn(SignInPage.this.username, SignInPage.this.password)) {
this.continueToOriginalDestination();
setResponsePage(getApplication().getHomePage());
}
else {
SignInPage.this.error("Bad username / password combo!");
}
}

});
final WebClientInfo clientInfo = (WebClientInfo) this.getSession().getClientInfo();
this.add(new Label("userAgent", clientInfo.getUserAgent()));
this.add(form);
}
}

只要我在应用程序中至少登录一次,如果我再次注销,每次重新登录时都会重定向到原始页面。

我做错了什么?

最佳答案

经过进一步调试,发现问题所在。

在我的应用程序的 init() 中,我使用 this.getRequestCycleSettings().setGatherExtendedBrowserInfo(true); 收集浏览器信息。在 SignInPage 上,我正在调用 (WebClientInfo) this.getSession().getClientInfo() 。这会导致 Wicket 重定向到一个中间页面,该页面将收集浏览器信息,并在 session 尚未初始化时在第一次调用登录页面时将其放入 session 中。

由于此中间重定向,原始页面 URL 会丢失。对我来说,这看起来像是 Wicket 中的一个错误。

我发现解决此问题的唯一方法是通过直接从请求中检索原始 User-Agent header 来替换 WebClientInfo 对象,并手动处理它:

  1. 从应用程序初始化中删除 this.getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
  2. 在 SignInPage 类中,替换

    final WebClientInfo clientInfo = (WebClientInfo) this.getSession().getClientInfo();
    this.add(new Label("userAgent", clientInfo.getUserAgent()));

    final WebRequest webRequest = ((WebRequest)this.getRequest());
    this.add(new Label("userAgent", webRequest.getHeader("User-Agent")));

现在,不再有中间重定向,并且到原始页面的重定向可以正常工作。

关于java - 重定向到原始页面不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46690465/

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