如何使用@RolesAllowed与Keycloft和Java



我是web应用程序的新手,我玩过keycapture来了解所有这些授权/身份验证的工作原理。我还看了一下Quickstart Github Repo,并通过mastertheoss尝试了这个快速启动。

在本教程中,只有一个简单的REST服务

package annotation_test;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class HelloService {
@GET
@Path("/text")
public String getHello () 
{
return "hello world!";
} 
@GET
@Path("/json")
@Produces(MediaType.APPLICATION_JSON)
public SimpleProperty getPropertyJSON ()
{
SimpleProperty p = new SimpleProperty("key","value");
return p;
}
@GET
@Path("/xml")
@Produces(MediaType.APPLICATION_XML)
public SimpleProperty getPropertyXML () 
{
SimpleProperty p = new SimpleProperty("key","value");
return p;
}
}

现在我做了以下更改:

  1. 添加三个角色:adminuseremployee和三个用户
  2. 按如下方式编辑web.xml
<?xml version="1.0"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<security-constraint>
<web-resource-collection>
<web-resource-name>All Resources</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
<role-name>employee</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>KEYCLOAK</auth-method>
<realm-name>Test</realm-name>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>employee</role-name>
</security-role>
</web-app>

现在,REST端点仅对角色为"admin"one_answers"employee"的用户可用。现在我想利用安全注释,并尝试了以下操作:

package annotation_test;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.annotation.security.RolesAllowed;

@Path("/hello")
public class HelloService {
@GET
@Path("/text")
public String getHello () 
{
return "hello world!";
}
@RolesAllowed("employee")
@GET
@Path("/json")
@Produces(MediaType.APPLICATION_JSON)
public SimpleProperty getPropertyJSON ()
{
SimpleProperty p = new SimpleProperty("key","value");
return p;
}
@RolesAllowed("admin")
@GET
@Path("/xml")
@Produces(MediaType.APPLICATION_XML)
public SimpleProperty getPropertyXML () 
{
SimpleProperty p = new SimpleProperty("key","value");
return p;
}
} 

但是,只要用户具有"admin"或"employee"角色,它就可以访问所有内容。

这个注释是如何正确完成的?我想使用我在keycloft中定义的角色,使用注释来限制对代码的访问,这样我就必须尽可能少地更改代码。我发现了一些SpringBoot的例子,但我不想改变我的设置。。。

我认为您的"问题"位于web.xml中。在这里,您将角色adminemployee设置为允许用于所有资源(因为url模式/*(。

相关内容

  • 没有找到相关文章

最新更新