2016-09-15 6 views
0

Мой оригинальный пост hereПравильная настройка для REST конечных точек в Shiro

Я пытаюсь защитить набор REST конечных точек с Широ. Моя теория заключается в том, что если я передаю JWT с моим запросом REST, я могу использовать Shiro (через аннотации) для защиты своих конечных точек.

Я создаю свои конечные точки, как это (например):

@GET 
@Produces(MediaType.APPLICATION_JSON) 
@Path("status/{companyId}") 
@RequiresAuthentication 
@RequiresRoles("SomeRole") 
public Response getStatus(@PathParam("companyId") int companyId){ 
    ... do stuff ... 
} 

Я ожидаю, что если я буду называть конечную точку без аутентификации, я буду получать HTTP 401 ошибки. Тем не менее, метод называется успешно, если JWT не поставляется , как это было бы, если на нем вообще нет безопасности.

Предположим, что моя конфигурация Shiro неверна. Поскольку это строго «бэкэнд-приложение», я не использую конфигурации Shiro/Stormpath, которые относятся ко всему, что связано с «front-end» (например, loginURL и т. Д.).

Вот мой shiro.ini:

[main] 
#ERRORS IF UNCOMMENTED 
#cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
#securityManager.cacheManager = $cacheManager 
#stormpathClient.cacheManager = $cacheManager 

# NOT NEEDED? 
#sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
#securityManager.sessionManager = $sessionManager 
#securityManager.sessionManager.sessionIdCookieEnabled = false 
#securityManager.sessionManager.sessionIdUrlRewritingEnabled = false 

[urls] 
/** = rest 

Эта конфигурация позволяет каждый запрос через (как описано выше).

Если я раскомментировать [главный] раздел, я получаю IllegalArgumentException: Configuration error. Specified object [stormpathClient] with property [cacheManager] without first defining that object's class. Please first specify the class property first, e.g. myObject = fully_qualified_class_name and then define additional properties.

Что мне нужно, чтобы выяснить, что является правильной минимальной конфигурацией Shiro для REST конечных точек (и только REST конечных точек), так что я могу позволить получить доступ с помощью JWT.

Спасибо за любую помощь.

ответ

1

Я предполагаю, что аннотации не обрабатываются ничем во время выполнения. Вам нужно будет сообщить вашему приложению JAX-RS, чтобы обработать их.

Я сделал это с этой библиотекой в ​​прошлом: https://github.com/silb/shiro-jersey/

Конкретно что-то вроде этого: https://github.com/silb/shiro-jersey/blob/master/src/main/java/org/secnod/shiro/jersey/AuthorizationFilterFeature.java

Что касается второй части вопроса, моя единственная догадка среды Stormpath/Shiro неправильно настроен.

Вы установили конфигурацию фильтра в свой web.xml или все настройки загружены из фрагмента сервлета?