0

有人可以告诉我有什么方法可以保护使用spring rest在spring boot项目中编写的restful web服务(没有用户凭据检查,因为该服务是由位于不同服务器上的远程应用程序调用的)

问题陈述:

我有一个休息类和一个方法,应该由另一个远程应用程序访问。远程应用程序不会发送除正文内容和内容类型之外的任何内容。在这种情况下,我如何保护这个休息服务,以便只能由那个特定的远程应用程序访问服务。

@RequestMapping("/rest")
@RestController 
public class WorkflowController {

    @RequestMapping(value = "ticket/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseStatus(HttpStatus.CREATED)
    @ResponseBody
    public Long startWorkflow(@RequestBody TicketInfo ticketInfo) {
        ...//DO SOMETHING

        Long id = 1L;

        return id; // return some long value
    }

}

请提出实现这一目标的方法。提前致谢

4

2 回答 2

1

好的,所以我不知道我是否完全理解你的问题,但我会假设不同的情况。假设您的客户端应用程序位于静态 IP 上,您可以创建一个过滤器和一个 IP 地址白名单,这将非常简单,而且可能还不够好。

如果不是这种情况,您可以使用 GET 或 POST 参数并再次创建过滤器,您必须在第一次调用中发送身份验证字符串以获取身份验证。您还必须实现身份验证管理器。

        if(hsr.getParameter("ex_code") != null){ 
            String exCode= hsr.getParameter("ex_code");


            String userToken = new String( Base64.getDecoder().decode(hsr.getParameter("ex_code")));

            PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken(serviceThatReturnsAUserDetailsFacade.loadUserByUsername(userToken),
                    exCode);

            token.setDetails(authenticationDetailsSource.buildDetails((HttpServletRequest) request));

            try {


                authentication = authenticationManager.authenticate(token);
             ....
于 2015-09-23T14:26:52.480 回答
0

如果您不想实现任何安全性并且只想验证主机和端口(只有一个应用程序可以在特定主机和端口上运行)并假设您使用 Spring,那么您可以简单地从传入的 HttpServletRequest 获取以下内容:-

a) RemoteAddr -> IP address of machine from which request originated.
b) RemoteHost -> Host name of machine from which request originated.
c) RemotePort -> Port of machine from which request originated.

有一种接口方法将验证此,如果有效则允许它通过,如果无效则将相应的错误消息返回给客户端。

除此之外,还有另一个选项也称为“匿名授权”,详情请点击此处

于 2015-09-24T10:00:59.820 回答