У меня есть проблема, что, когда я успешно вошли в систему, я хочу, чтобы сделать запрос, чтобы получить информацию о пользователе. запрос я посылаю это запрос обеспеченного GET, который https://localhost:8080/users/userOne
этот запрос отправить мой угловым фронтэндом.
1003 * Но моя проблема сейчас, весна Загрузочный говорят мне о том, что пользователь не имеет право и отправки 401 ошибки. Я отправляю токен авторизации, когда делаю запрос от внешнего интерфейса к внутреннему. В моем коде ниже вы можете видеть, что я делаю.
Служба Angular :
getUserDetails(username) {
const headers = new HttpHeaders().append('Authorization', this.cookieService.get('token')).append('Content-Type', 'application/json');
return this.http.get(`http://localhost:8080/users/` + username, { headers }).pipe(
map(
userData => {
console.log(userData);
return userData;
}
));
}
Мой UserController:
@RestController
public class UserController {
@Autowired
private UserService userService;
@CrossOrigin(origins = "http://localhost:4200/", maxAge = 3600)
@RequestMapping(value = "/users", method = RequestMethod.GET)
public ResponseEntity<User> getUserByUsername (@RequestBody String username){
final User user = userService.getUserByUsername(username);
return ResponseEntity.ok(user);
}
}
My WebSecurityConfig
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers(HttpMethod.POST,"/authenticate").permitAll()
.anyRequest().authenticated().and()
.exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().formLogin().disable();
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
Мой фильтр
@Override
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws ServletException, IOException {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH,OPTIONS");
res.setHeader("Access-Control-Allow-Headers", "Authorization, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
if ("OPTIONS".equalsIgnoreCase(req.getMethod())) {
res.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
Запрос аутентификации в Angular:
authenticate(username, password) {
const headers = new HttpHeaders({
'Content-Type': 'application/json',
Authorization: sessionStorage.getItem('token'),
});
return this.httpClient.post<any>('http://localhost:8080/authenticate', {username, password}).pipe(
map(
userData => {
sessionStorage.setItem('username', username);
sessionStorage.setItem('token', userData.token);
this.isLoggedIn = true;
return userData;
}
)
);
}
Ошибка, которую я получаю:
GET http://localhost:8080/users/userOne 401
ERROR HttpErrorResponse {headers: HttpHeaders, status: 401, statusText: "OK", url: "http://localhost:8080/users/Bogatom", ok: false, …}
Я не знаю, что я делаю неправильно ...