使用Wildfly 8.1.0.Final
我想创建一个Web应用程序,需要基本身份验证才能访问/ api / *,但应该打开应用程序的其余部分。为此,我有以下web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<security-constraint>
<web-resource-collection>
<web-resource-name>Api access</web-resource-name>
<url-pattern>/api/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>api</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>api</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Authentication requires api access</realm-name>
</login-config>
</web-app>
使用浏览器进行测试,这可以按预期工作。
http://localhost:8080/myapp/api
...需要身份验证。
http://localhost:8080/myapp
...不需要身份验证。
这是棘手的部分:
第三方访问/ myapp并在请求中包含授权标头:
Authorization: Basic ZGlsbDpkYWxs
这不是在wildfly中注册的用户,但这并不重要,因为/ myapp是开放的,并且不需要授权。但是会发生什么:
401 Unauthorized
为什么呢?我没有告诉我们对/ myapp使用任何安全约束,但它默认为我已经为/ myapp / api注册的安全限制
这是与underow一起引入的新行为,因为使用Jboss AS 7.1.1.Final这没有发生。
如果请求中包含授权,我如何告知承诺不对开放资源使用授权?
答案 0 :(得分:0)
我可以通过WildFly 8.1.0.Final确认问题。在同一场景中,GlassFish 4.0不响应401。