10

Tomcat 6.0.24 コンテナーで単純な Jersey RESTful API を保護する必要があります。ファイルを使用してユーザーとロールを定義する基本認証で認証を維持したいと思いtomcat-users.xmlます(これは今のところ、小さいと言ったように)。

さて、承認のために、、、、など@RolesAllowedのJSR 250 アノテーションを使用できるようにしたいと思います。@PermitAll@DenyAll

私は一生、これをすべて結び付ける方法を理解することはできません。

現時点では非常に単純なものが必要なので、Spring Security ルートに行きたくありません。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

最初は、認証と権限管理をカバーするフィルターを使用して開始できます。ResourceFilter と ContainerRequestFilter を実装すると、httpRequest を取得してセッションを取得し、アプリケーション/リクエストを関連するメソッドにリダイレクトできます。

権限管理のために、SecurityContext フィルターを実装できます。最初に isUserInRole をチェックして、リクエストをメソッド内に入れる必要があります。

SecurityContext 実装のサンプルは次のとおりです。

 public class SecurityContextImpl implements SecurityContext {

    private final SessionUser user;

    public SecurityContextImpl(SessionUser user) {
        this.user = user;
    }

    public Principal getUserPrincipal() {
        return user;
    }

    public boolean isUserInRole(String role) {

        if(user == null) {
            throw new AuthenticationException();
        }
        if(ObjectUtil.isNull(user.getPrivileges())){
            throw new AuthenticationException();
        }
        if(!user.getPrivileges().contains(role)) {
            throw new InvalidAuthorizationHeaderException();
        }
        return user.getPrivileges().contains(role);
    }

    public boolean isSecure() {
        return false;
    }

    public String getAuthenticationScheme() {
        return SecurityContext.BASIC_AUTH;
    }
}

基本的な SecurityContextFilter 実装は次のとおりです。

    public class SecurityContextFilter implements ResourceFilter, ContainerRequestFilter {

    private static final Logger LOG = LoggerFactory.getLogger(SecurityContextFilter.class);

    protected static final String HEADER_AUTHORIZATION = "Authorization";

    protected static final String HEADER_DATE = "x-java-rest-date";

    protected static final String HEADER_NONCE = "nonce";


    private HttpServletRequest httpRequest;




    public SecurityContextFilter() {


    }


    public ContainerRequest filter(ContainerRequest request) {

        SessionUser sessionUser = (SessionUser) httpRequest
                .getSession()
                .getAttribute("sessionUser");

        request.setSecurityContext(new SecurityContextImpl(sessionUser));

        return request;
    }


    public ContainerRequestFilter getRequestFilter() {
        return this;
    }

    public ContainerResponseFilter getResponseFilter() {
        return null;
    }

    public HttpServletRequest getHttpRequest() {
        return httpRequest;
    }

    public void setHttpRequest(HttpServletRequest httpRequest) {
        this.httpRequest = httpRequest;
    }


}

フィルターを web.xml 内の init-param として配置することを忘れないでください。

次に、ロール権限認証ロジックでリクエストを処理できます。

于 2014-01-15T13:58:17.103 に答える