Bonjour
je travaille actuellement sur une application Web
Front: angular 8
Back: Spring boot, Java 8 qui expose des WS REST (UserController)
j'ai ajouté un Filter pour autoriser le crossDomain
je rencontre un problème de récupération du token, en fait, tous ce que je mets dans le ckamps "Authorization" du header coté angularn'est pas transmis au backend.
deux situations:
1:
- controller mappé @RequestMapping("/users")
- methode mappée directement à la racine : @RequestMapping(value = "/{idUser}", method = RequestMethod.GET, produces = "application/json")
http://localhost:8080/users/5
==> tous va bien, le champ "Authorization" passé dans le header est récupéré corretement coté backend.
Situation 2:
controller mappé @RequestMapping("/users")
- methode mappée : @RequestMapping(value = "/detail/{idUser}", method = RequestMethod.GET, produces = "application/json")
http://localhost:8080/users/detail/5
==> KO: impossible de récupérer les champs coté Backend.
interceptor
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { // add authorization header with jwt token if available let currentContext = this.storageService.currentUserContextValue; if (currentContext && currentContext.accessToken && currentContext.accessToken.token) { // alert(currentContext.accessToken.token) ; console.info(currentContext.accessToken.token) ; console.info('body : ' +request.body) ; request = request.clone({ setHeaders: { Authorization: `${currentContext.accessToken.token}` } }); } return next.handle(request); }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "*"); chain.doFilter(req, res); }
merci pour votre aideCode:
1
2
3
4
5
6
7
8 private String extractAuthTokenFromRequest(HttpServletRequest httpRequest) { // String authToken = httpRequest.getHeader("X-Access-Token"); String authToken = httpRequest.getHeader("Authorization"); if (authToken == null) { authToken = httpRequest.getParameter("token"); } return authToken; }