gpt4 book ai didi

java - spring 从函数调用 Controller 方法

转载 作者:行者123 更新时间:2023-12-02 01:31:29 24 4
gpt4 key购买 nike

嗨,我有一个 Controller :-

@CrossOrigin(origins = "http://localhost", maxAge = 3600)
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/login", method = RequestMethod.get)
public String login(@RequestBody User login) throws ServletException{
}
}

我还有另一个GenericFilterBean类。这是为了执行一些安全功能,例如验证 token 等。

public class JwtFilter extends GenericFilterBean {

public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain)
throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
final String authHeader = request.getHeader("authorization");

if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);

chain.doFilter(req, res);
} else {

if (authHeader == null || !authHeader.startsWith("Bearer ")) {
new ModelAndView("user/login");// this way i am trying to call one controller method.
throw new ServletException("Missing or invalid Authorization header"); // this is throws one exception. This is only for the dev purpose.
}else {

final String token = authHeader.substring(7);

try {
final Claims claims = Jwts.parser().setSigningKey("secretkey").parseClaimsJws(token).getBody();
request.setAttribute("claims", claims);
} catch (final SignatureException e) {
throw new ServletException("Invalid token");
}

chain.doFilter(req, res);
}
}
}
}

我的问题来自于doFilter方法,我如何调用 Controller 方法login

这个new ModelAndView("user/login");代码不起作用。所以请建议一些方法来做到这一点。

最佳答案

作为最佳实践,您不应该真正将登录放入获取请求中。

其次,如果您希望过滤器验证登录,您可以将其用作中间件/作为方面/或者仅在服务类中编写验证方法并使用它。

如果您确实想通过过滤器调用端点,可以尝试使用其余模板。

String fooResourceUrl = "http://localhost:8080/user/login";
User userWithLoginCredentials = new User() //Create your user object
HttpEntity<User> request = new HttpEntity<>(userWithLoginCredentials);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Foo> response = restTemplate.exchange(fooResourceUrl, HttpMethod.GET, request, User.class);

关于java - spring 从函数调用 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com