AngularJS浏览器身份验证提示

时间:2013-07-30 13:10:26

标签: java javascript authentication angularjs login

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

在我的AngularJS应用中:

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

项目资源受我的 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>
...

问题是当我在未经过身份验证时尝试访问此资源时,浏览器会显示登录提示并且我的请求处于暂挂状态,直到我单击取消,然后响应为401,其中WWW-Authenticate报头中。

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你可以做一个简单的伎俩:

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

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

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

希望有所帮助