Авторизация в JAX-RS

Я разрабатываю приложение, использующее javaEE / Wildfly и JAX-RS для спокойного обслуживания.

У меня есть такая конечная точка:

@POST
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response addSchool(SchoolDto schoolDto, @HeaderParam("token") String userToken) {

    List<String> actionsNeeded = new ArrayList<String>(
            Arrays.asList(
                    "create school"
                    ));
    if (authService.userHasActionList(userToken, actionsNeeded) == false ) 
    {
        return authService.returnResponse(401);
    }

    Response addSchoolServiceResponse = schoolResponse.create(schoolDto);
    return addSchoolServiceResponse;
}

Используя токен в заголовке, моя служба авторизации проверяет, имеет ли учетная запись пользователя в своем списке разрешенных действий те, которые необходимы для использования контрольной точки.

Он работает, но я повторяю, что на каждом контрольном пункте ... Я ищу способ сделать это:

@POST
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Annotation("action 1 needed", "Action 2 needed")
public Response addSchool(SchoolDto schoolDto, @HeaderParam("token") String userToken) {        
    Response addSchoolServiceResponse = schoolResponse.create(schoolDto);
    return addSchoolServiceResponse;
}

аннотацию, в которой я могу передать некоторые параметры (мои действия и, самое главное, иметь токен пользователя), которые запускают фильтр или что бы проверить безопасность, возвратите 401 или пусть этот метод будет выполнен, если пользователю разрешено находиться там.

Я нашел много вещей (@Secured и т. Д.) Для безопасности, основанной на роли, но не на действии

Кто-то уже сделал что-то подобное?

java,rest,authorization,jax-rs,

0

Ответов: 1


0

Наконец, я начал работать, и моя работа заключалась в том, чтобы получить доступ к токену в заголовке и работать с аннотациями, и теперь все в порядке (просто нужно настаивать и попробовать еще раз, когда я предполагаю ...) вот что это такое нравится :

@Provider
@Actions
public class AuthorizationFilter implements ContainerRequestFilter {

@EJB
AuthService authService;

@Context
private ResourceInfo resourceInfo;

List<String> actionsNeeded = new ArrayList<String>();

@Override
public void filter(ContainerRequestContext reqContext) throws IOException {
  Actions annotations = resourceInfo.getResourceMethod().getAnnotation(Actions.class);
  String token;

  try {
      token = reqContext.getHeaders().get("token").get(0);  
      for (String annotation : annotations.value()) {
          actionsNeeded.add(annotation);
      }
        if (authService.userHasActionList(token, actionsNeeded) == false ) 
        {
            reqContext.abortWith(authService.returnResponse(401));
            return;
        }
    } catch (Exception e) {
        System.out.println("Headers 'token' does not exist !");
        reqContext.abortWith(authService.returnResponse(400));
    }    

  }
}
Java, отдых, авторизация, JAX-RS,
Похожие вопросы