Shiro 中 REST 端点的正确配置
Correct configuration for REST endpoints in Shiro
我原来的post是here
我正在尝试使用 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 配置不正确。由于这完全是一个 'backend' 应用程序,因此我没有使用适用于任何 'front-end' 相关内容(例如 loginURL 等)的 Shiro/Stormpath 配置
这是我的 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
此配置允许每个请求通过(如上所述)。
如果我取消注释 [main] 部分,我会得到 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.
我需要弄清楚的是 REST 端点(并且只有 REST 端点)的正确最低 Shiro 配置是什么,这样我就可以允许使用 JWT 进行访问。
感谢您的帮助。
我猜注释在运行时没有被任何东西处理。您需要告诉您的 JAX-RS 应用程序来处理它们。
我过去用这个库做过这个:
https://github.com/silb/shiro-jersey/
至于问题的第二部分,我唯一的猜测是 Stormpath/Shiro 环境设置不正确。
您是否在 web.xml 中放置了过滤器配置,或者所有配置都是从 servlet 片段加载的?
我原来的post是here
我正在尝试使用 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 配置不正确。由于这完全是一个 'backend' 应用程序,因此我没有使用适用于任何 'front-end' 相关内容(例如 loginURL 等)的 Shiro/Stormpath 配置
这是我的 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
此配置允许每个请求通过(如上所述)。
如果我取消注释 [main] 部分,我会得到 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.
我需要弄清楚的是 REST 端点(并且只有 REST 端点)的正确最低 Shiro 配置是什么,这样我就可以允许使用 JWT 进行访问。
感谢您的帮助。
我猜注释在运行时没有被任何东西处理。您需要告诉您的 JAX-RS 应用程序来处理它们。
我过去用这个库做过这个: https://github.com/silb/shiro-jersey/
至于问题的第二部分,我唯一的猜测是 Stormpath/Shiro 环境设置不正确。
您是否在 web.xml 中放置了过滤器配置,或者所有配置都是从 servlet 片段加载的?