私は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" })
私は...私はどんな成功せずに異なる多くのことを試してみましたweb.xmlファイルを持っているコンテンツ
<jboss-web> <security-domain>MySecurityDomain</security-domain> </jboss-web>
で:-(
を
現在のコンテンツのjboss-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ヘッダーは評価されません。この場合、すべての要求は拒否されます。
可能であれば、サーブレットを作成せずにExceptionMapperを使用することをお勧めします。
私が逃したアイデアはありますか?