java - AngularJS浏览器验证提示

标签 java javascript angularjs authentication

我正在用 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>
...

问题是,当我尝试在未经身份验证的情况下访问此资源时,浏览器会显示登录提示,并且我的请求处于待处理状态,直到我单击取消,然后响应为带有 WWW-Authenticate header 的 401。

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

1- 告诉后端不要发送 WWW-Authenticate header 。如何在 Java 中执行此操作?
2- 发送另一个状态代码而不是 401。这是正确的行为吗? ?如果是:该怎么做?

感谢您的帮助。

最佳答案

你可以做一个简单的技巧:

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

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

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

希望对你有帮助

关于java - AngularJS浏览器验证提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947973/

相关文章:

java - 更改包名称 android manifest 导致问题 JNI

javascript - 如何通过 jQuery 按下键盘的按钮之一?

javascript - Angular 新手 : trying to use ng-change, 获取 "Module ' ngModel' 不可用”?

jquery - 无法从 Angular 调用 JQuery 插件

javascript - 使用 angularJS 和烂番茄进行 API 调用

java - Java 中键上带有错误栏的映射?

java - float 操作按钮和 View 寻呼机

java - 如何根据 xml 解析的值在 listview 中动态更改颜色?

javascript - Chartjs - 未捕获的引用错误图表未定义 Laravel 5.8

javascript - 如何检测 'enter'字符?