Servlets Httpservletrequest.authenticate()方法不向登录页发送重定向

Servlets Httpservletrequest.authenticate()方法不向登录页发送重定向,servlets,websphere,security-constraint,websphere-9,Servlets,Websphere,Security Constraint,Websphere 9,我的应用程序正在WebSphereApplicationServer9.0.0.9上运行。我在应用程序的web.xml文件中添加了以下安全约束。其目的是保护每个请求,而不管它是否需要进行身份验证 <security-constraint> <web-resource-collection> <web-resource-name>All</web-resource-name> <url-pattern&g

我的应用程序正在WebSphereApplicationServer9.0.0.9上运行。我在应用程序的web.xml文件中添加了以下安全约束。其目的是保护每个请求,而不管它是否需要进行身份验证

<security-constraint>
    <web-resource-collection>
        <web-resource-name>All</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
            <description>Ensure to allow only confidential communication</description>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<!-- For FORM authentication -->
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/login.jsp?error=true</form-error-page>
        </form-login-config>
    </login-config>

在浏览器中,在点击/home url时,我总是得到一个200 OK的响应,在响应中设置了上面的“auth msg”标题和一个空白页面。预期的行为是将用户带到登录页面,但这不会发生。WAS控制台中也会检查“启用应用程序安全性”。这里还缺什么?这里唯一的解决方法是显式点击login.jsp页面。登录页面显示,我可以从那里登录,一切正常。但是自动重定向到登录页面并没有发生。同样的设置在WAS liberty中也可以正常工作。

这很奇怪,如果您有安全约束,如
/*
对所有资源的访问都应该受到保护,并且应该在没有任何过滤器的情况下自动重定向。我建议你删除这个过滤器,看看你是否会被重定向到登录页面。啊。。还有一件事,您是否定义了安全角色并将其与安全约束关联,因为我在xml中没有看到它。您需要
role…
@Gas我已定义了安全角色。我尝试了添加上述内容的解决方案,但登录页面本身受到保护。接下来,我尝试添加另一个,通过不添加任何内容来放松对login-page.jsp的访问,但这导致/home和/login.jsp之间的重定向过多。不管我把s按什么顺序排列,结果都是一样的。以安全模式显示的login.jsp页面也是要求之一。除了容器身份验证之外,我们的产品还将身份验证委托给第三方服务。根据管理员设置的身份验证类型,我们要么在编写的筛选器中将身份验证委托给第三方服务,要么在同一筛选器中调用authenticate()方法将身份验证委托给容器。登录页面永远不受保护,即使你对
/*
有限制,那么你的设置也有问题。奇怪的是,如果你有像
/*
这样的安全限制,那么对所有资源的访问都应该受到保护,并且应该在没有任何过滤器的情况下自动重定向。我建议你删除这个过滤器,看看你是否会被重定向到登录页面。啊。。还有一件事,您是否定义了安全角色并将其与安全约束关联,因为我在xml中没有看到它。您需要
role…
@Gas我已定义了安全角色。我尝试了添加上述内容的解决方案,但登录页面本身受到保护。接下来,我尝试添加另一个,通过不添加任何内容来放松对login-page.jsp的访问,但这导致/home和/login.jsp之间的重定向过多。不管我把s按什么顺序排列,结果都是一样的。以安全模式显示的login.jsp页面也是要求之一。除了容器身份验证之外,我们的产品还将身份验证委托给第三方服务。根据管理员设置的身份验证类型,我们要么在编写的筛选器中将身份验证委托给第三方服务,要么在同一筛选器中调用authenticate()方法将身份验证委托给容器。登录页面永远不受保护,即使您对
/*
有限制,您的设置也有问题。
 if (CommonUtils.isNullOrEmpty(user)) {
  response.setHeader( "auth-msg", "auth-required");
  request.authenticate(response);
  return;
}