使用Java保护RESTful Web服务

时间:2016-07-13 08:24:06

标签: java web-services rest

我想保护RESTful网络服务。这是我的代码:

UserService.java

@Path("/UserService")
public class UserService
{
    @GET
    @Produces("text/plain;charset=UTF-8")
    @Path("/hello")
    public String sayHello(@Context SecurityContext sc) {
        if (sc.isUserInRole("admin"))  
            return "Hello World!";
        throw new SecurityException("User is unauthorized.");
    }
}

的web.xml

<display-name>RestfulWebService</display-name>
<servlet>
    <servlet-name>Jersey RESTful Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.tutorialspoint</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey RESTful Application</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

当我尝试此链接时

http://localhost:8080/RestfulWebService/UserService/hello

它总是给我一个未经授权的例外。那么如何让代码返回hello world并使其获得授权?

1 个答案:

答案 0 :(得分:0)

首先需要添加一个登录过滤器来拦截here所述的请求。在此过滤器中,您可以使用此< - p>设置安全上下文

RequestContext.setSecurityContext(securityContext);

请记住拦截请求中的“admin”用户名,并在上面的securityContext中进行设置。

可以使用HTTP Basic Authentication传递用户名。