Мой оригинальный пост 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.
Спасибо за любую помощь.