使ってます JBoss AS
およびJAX-RS
REST
エンドポイントを作成します。
私のクラスが次のようになっているとしましょう
@Path("/users")
public class UserResource {
@GET
public Response getAccount() {
return "hello";
}
}
現在、getAccount
は現在認証されていません
希望
-コードをgetAccount
にヒットしたときにユーザーが認証されるように、認証を追加したい
-可能であれば、XML構成ではなくアノテーションによって認証を駆動したい
-データベースの比較を行い、ユーザーが有効かどうかを確認したい
問題
-一度も実行したことがないため、実装方法がわかりません
-私はたくさんググって、ジャージーの例を見つけました
[〜#〜]更新[〜#〜]
-リクエストごとに認証資格情報を送信し、notセッションを作成したい
簡単な例を1つ紹介してください。そこから拡張していきます。
これを次のコードで解決しました。
注トークンメカニズムは、更新すると更新されます
私が持っているインターセプターを変更することでこれを解決しました、以下はコードです
注釈
@Inherited
@InterceptorBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface SecurityChecked {
}
リソースクラス
public class SecureResource {
@GET
@SecurityChecked
public Response getUser() {
return Response.ok("authenticated successfully!").build();
}
}
インターセプタークラス
@Interceptor
@Provider
@ServerInterceptor
@SecurityChecked
public class SecurityCheckInterceptor implements PreProcessInterceptor, AcceptedByMethod {
private static final Logger LOGGER = LoggerFactory.getLogger(SecurityCheckInterceptor.class);
@Nullable
@Override
public ServerResponse preProcess(final HttpRequest request, final ResourceMethod method) throws Failure, WebApplicationException {
final List<String> authToken = request.getHttpHeaders().getRequestHeader("X-AUTH");
if (authToken == null || !isValidToken(authToken.get(0))) {
final ServerResponse serverResponse = new ServerResponse();
serverResponse.setStatus(Response.Status.UNAUTHORIZED.getStatusCode());
return serverResponse;
}
return null;
}
private static boolean isValidToken(@Nonnull final String authToken) {
LOGGER.info("validating token: " + authToken);
return true;
}
@SuppressWarnings("rawtypes")
@Override
public boolean accept(final Class declaring, final Method method) {
// return declaring.isAnnotationPresent(SecurityChecked.class); // if annotation on class
return method.isAnnotationPresent(SecurityChecked.class);
}
}
次に、JBossにリソースクラスをデプロイし、コマンドラインで次のコマンドを発行して、統合テストを実行します
curl --header 'X-AUTH: 1a629d035831feadOOO4uFReLyEW8aTmrCS' http://localhost:8080/market-1.0-SNAPSHOT/rest/login
curl --header 'InvalidHeader: InvalidHeaderValue' http://localhost:8080/market-1.0-SNAPSHOT/rest/login
必要なのは、JAX RSエンドポイントの前にあるステートレススプリングセキュリティ構成です。あなたが解決しようとしている正確な問題に対処しましたが、共有する独自のコードがありません。
ここにあなたが求めている正確なことをしたプロジェクトがあります、ある賢い人があなたのためにそれをすべてやった;)
https://github.com/philipsorst/angular-rest-springsecurity
魔法とは?
次のリンクを参照して、ステートレススプリングセキュリティの構成方法を理解してください..、https://github.com/philipsorst/angular-rest- springsecurity/blob/master/src/main/resources/context.xml
ユーザーが初めて検証され、トークンが生成される方法を確認します。https://github.com/philipsorst/angular -rest-springsecurity/blob/master/src/main/Java/net/dontdrinkandroot/example/angularrestspringsecurity/rest/resources/UserResource.Java
これは、トークンチェック後にすべてのリクエストでプログラムによるログインが実行されるクラスです。https://github.com/philipsorst/angular -rest-springsecurity/blob/master/src/main/Java/net/dontdrinkandroot/example/angularrestspringsecurity/rest/AuthenticationTokenProcessingFilter.Java