【问题标题】:AngularJS browser authentication promptAngularJS 浏览器认证提示
【发布时间】:2013-07-30 15:44:30
【问题描述】:

我正在用 AngularJS 为前端和 JavaEE 为后端开发一个应用程序。在我的 AngularJS 应用程序中,我尝试访问后端提供的 REST 资源。此资源受 JAAS 保护,因此只有经过身份验证的用户才能访问该资源。

在我的 AngularJS 应用中:

$http.get('/webresources/project/').success(function(data){...}).error(function(){...});

project 资源受我的 web.xml 文件保护:

...
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>file</realm-name>
</login-config>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/webresources/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
...

问题是,当我在未通过身份验证时尝试访问此资源时,浏览器会显示登录提示并且我的请求处于挂起状态,直到我单击 Cancel 然后响应是带有 WWW-Authenticate 的 401标题。

我想要的是我可以摆脱这个浏览器登录提示并显示我自己的登录表单。所以我找到了一些解决方案,但我不知道如何实现它们:

1- 对后端说不发送 WWW-Authenticate 标头。如何在 Java 中做到这一点?
2-发送另一个状态码而不是 401。这是一个正确的行为。 ?如果是:怎么做?

感谢您的帮助。

【问题讨论】:

  • 好的,伙计们,我发现了一些奇怪的东西。我尝试在请求标头中添加使用值“Basic”初始化的“Authorization”标头:$http.defaults.headers.common['Authorization'] = 'Basic ';,它在 Firefox 中工作(没有浏览器登录提示),但在 chrome 中,浏览器登录提示仍然出现。
  • 您找到解决问题的方法了吗?我有类似的问题,无法解决。

标签: java javascript authentication angularjs login


【解决方案1】:

你可以做一个简单的把戏:

创建一个 401.jsp 错误页面并将其添加到您的 web.xml; 这样做:

<%
response.reset();
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
%>

由于重置,这将删除 WWW-Authenticate 标头,但仍提供 401 状态。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 2013-02-07
    • 2014-08-10
    • 2014-09-08
    • 2017-06-09
    • 2020-05-05
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多