小门7基于Java EE 6表单的身份验证

时间:2019-01-02 13:54:10

标签: java-ee weblogic wicket java-ee-6 weblogic12c

我面临一个非常混乱的事实:我们在Java EE应用程序中有一个带有上下文根“ foo”的war模块。通过

限制访问
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>fooRealm</realm-name>
    <form-login-config>
      <form-login-page>/login</form-login-page>
      <form-error-page>/loginerror</form-error-page>
    </form-login-config>
</login-config>

受保护的资源是这样定义的

<security-constraint>

    <web-resource-collection>
      <web-resource-name>Foo-App</web-resource-name>
      <url-pattern>/bar/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>

    <auth-constraint>
      <role-name>foo-role</role-name>
    </auth-constraint>

    <user-data-constraint>
      <transport-guarantee>INTEGRAL</transport-guarantee>
    </user-data-constraint>

</security-constraint>

使用Wicket 7装入登录和登录错误页面:

mountPage("login", LoginWebPage.class);
mountPage("loginerror", LoginErrorWebPage.class);

我要做的是导航到https://localhost:7002/foo/bar,然后应用程序服务器(WebLogic 12.1.3)重定向到https://localhost:7002/foo/login(与预期的一样)。 Login-WebPage是带有以下html

的简单网页
<form method="POST" action="j_security_check">
    <input name="j_username" type="text" />
    <input name="j_password" type="password"/>
    <input type="submit" value="Login"></input>
</form>

wicket中的WebPage.java文件是一个没有任何wicket小部件的简单网页。这里唯一的事情是某些CSS资源作为PackageResourceReferences包括在内:

public class LoginWebPage extends WebPage {

    @Override
    public void renderHead(IHeaderResponse response) {
        response.render(CssHeaderItem.forReference(...));
    }
}

现在,我面临以下问题:如果我在LoginWebpage上输入有效的凭据,那么我将被重定向到受保护的资源/ foo / bar。输入无效凭据时的行为不同:然后URL保留在/ foo / j_security_check,服务器响应并返回状态代码404。如果我手动导航到/ foo / loginerror,则会看到登录错误页面。我不明白错误在哪里。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

将Weblogic 转发(而不是重定向),因此Wicket过滤器将无法处理/loginerror。 容器找不到/loginerror,而是用 404 进行响应。

我不确定这是否符合标准,您必须尝试使用​​其他容器进行比较。 要解决此问题,您可以使用jsp:

<form-error-page>/loginerror.jsp</form-error-page>

...重定向到实际的Wicket页面:

<% response.sendRedirect("./loginerror"); %>