如何在RestController中获取标头值并将其传递给父控制器



我对spring-boot很陌生,对web服务也很陌生。

我想在一个(抽象的(通用RestController中实现一个授权过程,它应该获得基本身份验证的内容。头,然后执行授权。

类似的东西:

public class GenericController
{
// Constructor 
protected GenericController(String basicAuth) throws MalformedURLException, ProtocolException, IOException
{
// check user can execute action
}
}

@RestController
@RequestMapping( "/users" )
public class UserController extends GenericController
{
private static final Logger logger = LoggerFactory.getLogger(UserController.class);

// Constructor
protected UserController() throws MalformedURLException, ProtocolException, IOException
{
// somehow get the basic auth information from header and pass it to the parent's constructor
basicAuth = ???

super(basicAuth);
}
@GetMapping( "/user/{cn}" )
public String getUser( @PathVariable String cn )
{
logger.error("Start getUser(...): cn=" + cn);
}

我该怎么做?(这可能吗?(

添加的信息:我的web服务本身就是其他web服务的消费者。

一旦主叫用户被授权"呼叫";使用";我的web服务我必须将基本身份验证转发/设置到我调用的web服务的请求中。

那么,我如何/在哪里可以";"截距";并在调用我的服务时获取标头?

我建议看一下Spring Security框架。有许多教程展示了如何将其配置为执行基本身份验证,例如:此处。

其主要思想是将身份验证/授权问题与控制器和业务逻辑代码解耦。为了实现这一点,使用了过滤器来拦截每个请求,并根据不同的条件对其进行验证。当实现无状态REST服务(每个请求都独立于其他请求(时,并没有那么困难。在处理会话时,逻辑将变得更加复杂。Spring Security实现了由多个过滤器组成的过滤器链,每个过滤器都执行自己的检查。

Spring Security在基于Spring的项目中经常使用,绝对值得一看,尽管第一次使用时可能会有点困难。

您可以使用HttpServlet请求从请求中获取头。

protected UserController(HttpServletRequest httpServletRequest) throws MalformedURLException, ProtocolException, IOException
{
System.out.println( httpServletRequest.getHeaders("key name"));
// somehow get the basic auth information from header and pass it to the parent's constructor
basicAuth = ???
super(basicAuth);
}

相关内容

  • 没有找到相关文章

最新更新