Java E 6 基于表单的 wicket 7 身份验证
Java EE 6 form based authentification with wicket 7
我面临一个非常令人困惑的事实:我们在 Java EE 应用程序中有一个 war 模块,上下文根 "foo"。通过
限制访问
<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 and the application server (WebLogic 12.1.3) redirects to 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(...));
}
}
现在我面临以下问题:如果我在登录网页上输入有效凭据,我将被重定向到受保护的资源 /foo/bar。输入无效凭据时的不同行为:然后 URL 保持在 /foo/j_security_check 并且服务器响应状态代码 404。如果我手动导航到 /foo/loginerror 然后我看到登录错误页面。我不明白错误在哪里。
有人可以帮忙吗?
Weblogic forwards 到 (而不是 redirecting),因此 Wicket 过滤器将无法处理 /loginerror
。
容器无法找到 /loginerror
,而是用 404 进行响应。
不知道合不合规,你得用其他容器对比一下。
对于解决方法,您可以使用 jsp:
<form-error-page>/loginerror.jsp</form-error-page>
...重定向到实际的 Wicket 页面:
<% response.sendRedirect("./loginerror"); %>
我面临一个非常令人困惑的事实:我们在 Java EE 应用程序中有一个 war 模块,上下文根 "foo"。通过
限制访问<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 and the application server (WebLogic 12.1.3) redirects to 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(...));
}
}
现在我面临以下问题:如果我在登录网页上输入有效凭据,我将被重定向到受保护的资源 /foo/bar。输入无效凭据时的不同行为:然后 URL 保持在 /foo/j_security_check 并且服务器响应状态代码 404。如果我手动导航到 /foo/loginerror 然后我看到登录错误页面。我不明白错误在哪里。
有人可以帮忙吗?
Weblogic forwards 到 /loginerror
。
容器无法找到 /loginerror
,而是用 404 进行响应。
不知道合不合规,你得用其他容器对比一下。 对于解决方法,您可以使用 jsp:
<form-error-page>/loginerror.jsp</form-error-page>
...重定向到实际的 Wicket 页面:
<% response.sendRedirect("./loginerror"); %>