我在WildFly 10上有一個JAX-RS應用程序,它將通過一個簡單的基本身份驗證來保護。如何將401響應的內容更改爲單個格式?
它的工作原理,到目前爲止,但如果驗證失敗,該服務器
<html>
<head>
<title>Error</title>
</head>
<body>Unauthorized</body>
</html>
這不是我所期望的響應
響應。我更喜歡定製的(json)響應。
如何做到這一點?
我做了什麼至今:
我配置我的服務器配置一個簡單的UserRolesLoginModule新Wildfly安全域(這是足以在我的情況):
<security-domain name="MySecurityDomain" cache-type="default"> <authentication> <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required"> <module-option name="usersProperties" value="${jboss.server.config.dir}/users.properties"/> <module-option name="rolesProperties" value="${jboss.server.config.dir}/roles.properties"/> <module-option name="hashAlgorithm" value="MD5"/> <module-option name="hashEncoding" value="base64"/> <module-option name="hashCharset" value="UTF-8"/> <module-option name="unauthenticatedIdentity" value="UnauthenticatedAccess"/> </login-module> </authentication> </security-domain>
我註釋了應用中的所有服務:
@SecurityDomain("MySecurityDomain") @RolesAllowed({ "RoleFromPropertyFile", "AnotherRoleFromPropertyFile" })
我創建了一個的jboss-web.xml文件與內容
<jboss-web> <security-domain>MySecurityDomain</security-domain> </jboss-web>
我有一個web.xml,我嘗試了很多不同的東西沒有任何成功... :-(
當前的內容:<security-constraint> <display-name>Deny all HTTP methods except GET and POST</display-name> <web-resource-collection> <web-resource-name>NextTest</web-resource-name> <url-pattern>/mypattern/*</url-pattern> <http-method-omission>GET</http-method-omission> <http-method-omission>POST</http-method-omission> </web-resource-collection> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>MySecurityRealm</realm-name> </login-config> <security-role> <description>Access to all application parts</description> <role-name>all</role-name> </security-role> <!-- and some more roles -->
我還實施了
ExceptionMapper<EJBAccessException>
來生成我自己的回覆。但是,只有當我刪除web.xml
的所有內容時才能找到此映射器。
我的猜測是,承辦人正在進行授權並處理對未授權訪問的響應。如果我刪除web.xml
中的安全配置,則會訪問EJB,但不會評估BasicAuth標頭。在這種情況下,所有請求均被拒絕。
我可能我會避免寫一個Servlet並使用ExceptionMapper來代替。
任何想法我錯過了什麼?