0

ファイルパスを取得するために残りのWebサービスを使用しています。ここでは、追加のセキュリティを提供するためにセキュリティ コンテキストを使用しています。ログインしたユーザーは、Web サービス URL で指定されたユーザー名と同じでなければならないという検証を使用しました ( security check )。

しかし、サーバーから特別なファイルパスを取得するために使用される1人のユーザーがいるという特別なケースが1つあります。このユーザーを Web サービスの URL から渡すと、ログインしているユーザーと URL で指定されたユーザーが同じではないため、セキュリティ コンテキストの検証に引っかかります。

そのため、特別なユーザーをセキュリティ チェックから除外する方法は他にもあります。この問題を解決するために、web.xml で構成を指定できますか。

例えば

condition 1 

logged-in user - xyz
web-service URL - 192.168.0.132/download.ws/xyz/fileid

passed in security checked.

condition 2 

logged-in user - xyz
abc is valid and authorized user.
web-service URL - 192.168.0.132/download.ws/abc/fileid

failed in security checked.

URLからのユーザーがabcの場合は、セキュリティチェックで許可せずに通過させたいです。

これは、有効なユーザーを確認するための Web サービス コードです。

public String getCallerId(SecurityContext sc) {

        // we always create a GenericPrincipal object in AuthService
        GenericPrincipal userPrincipal = (GenericPrincipal) sc.getUserPrincipal();
        String szUserEmailID= userPrincipal.getName();

        return szUserEmailID;
    }

    public boolean authorizeRequest(SecurityContext osc, String szResourceID,   String reqType) {
            if( getCallerId(osc).equalsIgnoreCase(szResourceID)) // check for logged-in user and user specified in web-service url
                return true;
            return false; 
        }
4

1 に答える 1

0

ロールとセキュリティ アノテーションを使用する必要があります。https://blogs.oracle.com/swchan/entry/servlet_3_0_security_annotations

また、ユーザー名がURLの一部である理由もわかりません。そうである必要はありません。あなたはユーザー名を知っています。URL はすべてのユーザーに対して同じである必要があり、現在認証されているユーザーに関連するデータのみを返します。したがって、これらの問題は発生しません。

その後、次を許可できます。

@RolesAllowed("StandardRole") 192.168.0.132/download.ws/fileid

@RolesAllowed("SuperUser") 192.168.0.132/download.ws/{special_path_pattern}/fileid

于 2015-05-20T08:12:58.550 に答える