Spring Authorization Server 的 /oauth2/token 请求怎么被拦截的

直接看源码
先找这个类OAuth2TokenEndpointFilter
然后看类的说明

意思就是说这个类响应/oauth2/token POST这个URI,好了知道在那里拦截了。

那它为啥会被拦截呢?看看源码你就会发现这个类在构造器创建了请求匹配的对象如下图

 这个时候发现这个方法是实现了抽象方法

所有看向父类OncePerRequestFilter(太多不展开,有兴趣可以去了解spring bean 初始化、 servlet等),这个类的意思就是对于每次的请求都进行请求过滤;所有这就是/oauth2/token post 会被拦截的原因

您可以使用拦截器来验证和拦截 OAuth 2.0 的 token。以下是一个示例配置拦截器的步骤: 1. 创建一个拦截器类,实现 Spring 的 HandlerInterceptor 接口。 ```java import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class OAuth2Interceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行拦截,用于验证 token String token = request.getHeader("Authorization"); // 进行 token 的验证逻辑 // 如果验证失败,可以返回错误响应或者重定向到登录页面 if (!validateToken(token)) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return false; } // 如果验证通过,可以继续处理请求 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 请求处理之后调用,可以进行一些后处理操作 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 整个请求处理完成后调用,可以进行一些资源清理操作 } private boolean validateToken(String token) { // 编写验证 token 的逻辑,根据实际需求进行实现 // 返回 true 表示验证通过,返回 false 表示验证失败 } } ``` 2. 在 Spring 配置文件中注册拦截器。 ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 拦截所有请求 --> <bean class="com.example.OAuth2Interceptor"/> </mvc:interceptor> </mvc:interceptors> ``` 以上示例中,拦截器会拦截所有请求,并在 preHandle 方法中验证 token。如果验证失败,会返回 401 Unauthorized 错误响应;如果验证通过,会继续处理请求。 请注意,这只是一个简单的示例,您需要根据实际情况编写验证 token 的逻辑。另外,还可以根据需要在拦截器的其他方法中添加一些后处理操作或资源清理操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值