Hallo.
ich möchte meine App mit verschiedenen Endpunkten absichern : Hier mein Controller :
Ich möchte nun,dass alle Aufrufe für den /api/v1/calendarUser/ Endpunkt nur von einem Administrator User aufgerufen werden können :
dazu habe ich eine SecurityConfig Klasse angelegt :
Geprüft habe ich das mit dem Postman Tool : Dort habe ich einen Get Request auf den Endpunkt : http://localhost:8080/api/v1/calendarUser/getAll mit und ohne Authenfication (basic Auth) gemacht.
Als Ergebnis bekomme ich immer :
Hat jemand eine Idee wo der Fehler liegt ?
Vielen Dank
ich möchte meine App mit verschiedenen Endpunkten absichern : Hier mein Controller :
Java:
@Controller
@Log4j2
public class CalendarUserController {
@Autowired
private CalendarUserFactory calendarUserFactory;
@PostMapping(value = "/api/v1/calendarUser/add", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public CalendarUser createCalendarUser(@RequestBody UserData userData) {
log.info("/api/v1/calendarUser/add");
log.info("userData : {}", userData);
return calendarUserFactory.buildAndSave(userData);
}
@DeleteMapping(value = "/api/v1/calendarUser/delete")
public void deleteCalendarUser(@RequestBody Long id) {
log.info("/api/v1/calendarUser/delete");
// TODO let factory delete item
//samsCalendarFactory.delete(id);
}
@GetMapping(value = "/api/v1/calendarUser/getAll")
public List<CalendarUser> getAllCalendarUser() {
log.info("/api/v1/calendarUser/getAll");
return calendarUserFactory.getAll();
}
}
Ich möchte nun,dass alle Aufrufe für den /api/v1/calendarUser/ Endpunkt nur von einem Administrator User aufgerufen werden können :
dazu habe ich eine SecurityConfig Klasse angelegt :
Java:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService() {
UserDetails adminUserDetails = User.withDefaultPasswordEncoder()
.username("admin")
.password("admin")
.roles("ADMIN")
.build();
UserDetails importUserDetails = User.withDefaultPasswordEncoder()
.username("importer")
.password("importer")
.roles("IMPORTER")
.build();
UserDetails defaulUserDetails = User.withDefaultPasswordEncoder()
.username("user")
.password("user")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(adminUserDetails, importUserDetails, defaulUserDetails);
}
//
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/").permitAll()
.antMatchers("/api/v1/calendarUser/getAll").hasRole("ADMIN")
.anyRequest().authenticated();
}
}
}
Geprüft habe ich das mit dem Postman Tool : Dort habe ich einen Get Request auf den Endpunkt : http://localhost:8080/api/v1/calendarUser/getAll mit und ohne Authenfication (basic Auth) gemacht.
Als Ergebnis bekomme ich immer :
Java:
{
"timestamp": "2021-08-31T10:02:21.743+00:00",
"status": 403,
"error": "Forbidden",
"message": "",
"path": "/api/v1/calendarUser/getAll"
}
Hat jemand eine Idee wo der Fehler liegt ?
Vielen Dank