在Shiro

时间:2016-09-15 20:45:52

标签: shiro

我的原帖是here

我试图用Shiro保护一组REST端点。我的理论是,如果我通过我的REST请求传递JWT,我可以使用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配置。相关的(例如loginURLs等)

这是我的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进行访问。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我猜测注释在运行时没有被任何东西处理。您需要告诉您的JAX-RS应用程序处理它们。

我过去用这个lib做过这个: 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中放置了filter config,或者是从servlet片段加载了所有配置?