我有一个这样的控制器:
@RestController
@RequestMapping(path = "/api/v1/cPathA", name = "cNameA")
@RequiredArgsConstructor
public class AController {
@PostMapping(path = "/pathA", name = "nameA")
public Void pathA() {
}
@GetMapping(path = "pathB", name = "nameB")
public Void pathB() {
}
}
我应该如何检索方法的
name
「nameA 或 nameB」?最好在 doFilterInternal
方法中执行此操作。
我尝试检查
HttpServeletRequest
内部,但似乎没有任何部分可以检索名称。我可以使用的最接近的是 HttpServletRequest 的 request.getServletPath()
,它返回 /api/v1/cPathA/nameA
,但我想获得实际名称。
JwtAuthenticationFilter.java
@Component
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JWTServiceImpl jwtServiceImpl;
private final UserServiceImpl userServiceImpl;
private final GetCookieByName getCookieByName;
@Override
protected void doFilterInternal(
@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain)
throws ServletException, IOException {
final String jwtToken;
final String refreshToken;
final String userEmail;
String name = request.getServerName(); # returns localhost
String path = request.getServletPath(); # returns /api/v1/cPathA/nameA
另外:最好当我访问 pathA 方法时,我会得到
cNameA
和 nameA
可能是链 cNameA.nameA
或数组。但至少能得到nameA
我就很满足了。
可以通过拦截器获取,创建拦截器bean,并继承HandlerInterceptorAdapter,重写preHandle()方法,在该方法中可以获取目标处理器的信息,包括名称