我已经在 java 中实现了我自己的安全框架的一部分,但我遇到了一个小问题。
我希望能够检查用户是否有权访问某个方法。 我可以通过简单地在方法内部添加一个检查来做到这一点,如下所示:
@GET
public Response getResource() throws Exception
{
if (AuthUtils.isAuthenticated(request, "ROLE1", "ROLE2"))
return Response.ok("Hello World!").build();
else
return Response.status(HttpServletResponse.SC_UNAUTHORIZED).build();
}
在其中提供有权使用该函数的角色列表。
然而在理想的世界中,我想做如下的事情
@Secure(roles = {"ROLE1", "ROLE"})
@GET
public Response getResource() throws Exception
{
return Response.ok("Hello World!").build();
}
默认情况下,它会在用户没有正确角色的情况下对所有用 @Secure 注释的方法返回未经授权的响应。
Java 可以实现这样的功能吗?如果是,怎么做?
最佳答案
如果您使用的是 Jersey 2.x,只需使用 RolesAllowedDynamicFeature
。您需要在您的应用程序中注册它。这将处理授权。您将使用注释 @RolesAllowed
。它可以在类级别或方法级别进行
@RolesAllowed({"ROLE1", "ROLE"})
@GET
public Response getResource() throws Exception
如果您使用 Servlet 身份验证,则角色将填充到 HttpServletRequest#getUserRoles
中。在这里您不需要做任何其他事情。从这段代码的外观来看,我假设您正在使用 servlet 安全性
if (AuthUtils.isAuthenticated(request, "ROLE1", "ROLE2"))
我猜 request
是 HttpServletRequest
。
如果您不使用 Servlet 安全性,那么要使其正常工作,您需要使用 Jersey filter设置 SecurityContext
。 Jersey 将使用 SecurityContext
来检查角色。您可以在 this post 中查看示例.
另请参阅:
- Jersey Security documentation .如果您查看授权部分,它会更多地解释您可以使用的其他注释。
关于java - 给方法添加注解,说明是否允许运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44070136/