Spring security - 403 bei Role Access Regel

8u3631984

Bekanntes Mitglied
Hallo.
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
 

8u3631984

Bekanntes Mitglied
Danke für deine Hilfe.
Noch eine Anmerkung zu meiner Anforderungen. Ich will per HttPClient auf die Schnittstelle zurgreifen :
Java:
        HttpClient httpClient = HttpClient.newBuilder()
                .version(HttpClient.Version.HTTP_2)
                .connectTimeout(Duration.ofSeconds(10))
                .authenticator(new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("admin", "admin".toCharArray());
                    }
                })
                .build();

        String url = "http://localhost:8080/api/v1/calendarUser/getAll";
        log.info("send request : {}", url);
        HttpRequest httpRequest = HttpRequest.newBuilder()
                .GET()
//                .header("Authorization", basicAuth("admin", "admin"))
                .uri(URI.create(url))
                .build();
        HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
        log.info("status code : {}",httpResponse.statusCode());
        log.info("body  : {}",httpResponse.body());

Wenn ich in der Config Methode :
Java:
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/").permitAll()
                .antMatchers("/api/v1/calendarUser/getAll").hasRole("ADMIN")
                //.and().formLogin();
    }
die formLogin zeile aukommentiere bekomme ich verschiede Status Code : 302
 

8u3631984

Bekanntes Mitglied
Habe meine Config Klasse noch einmal angepasst :
Java:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final PasswordEncoder passwordEncoder;

    @Autowired
    public SecurityConfig(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }

    @Override
    @Bean
    protected UserDetailsService userDetailsService() {
        UserDetails adminUserDetails = User.builder()
                .username("admin")
                .password(passwordEncoder.encode("admin"))
                .roles("ADMIN") // ROLE_ADMIN
                .build();

        UserDetails importerUserDetails = User.builder()
                .username("importer")
                .password(passwordEncoder.encode("importer"))
                .roles("IMPORTER") // ROLE_IMPORTER
                .build();

        return new InMemoryUserDetailsManager(
                adminUserDetails, importerUserDetails);

    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/api/v1/calendarUser/**").hasRole("ADMIN")
                .antMatchers(HttpMethod.POST, "/api/v1/calendarUser/add").hasRole("ADMIN")
                .anyRequest()
                .authenticated()
                .and()
                .httpBasic();
    }
}

Was geht nun (/)
wenn ich als admin User den Get Request aufrufe : http://localhost:8080/api/v1/calendarUser/getAll bekomme ich eine Antwort : status 200
Rufe ich den gleichen Get request mit dem improter User auf bekomme einen 403 zurücke. Alles so wie es sein soll.

Nun möchte ich das auch für einen Post request : http://localhost:8080/api/v1/calendarUser/add bekomme ich immer den Status 403 zurück.

HAt jemand eine Idee wo der Fehler in der Config ist.
 

Dimax

Top Contributor
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter
probiere
Java:
@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
 

mrBrown

Super-Moderator
Mitarbeiter
@bueges Welche Route soll jetzt mit welcher Methode für welchen User welchen Status zurückgeben?

probiere
Java:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
@EnableGlobalMethodSecurity braucht man nur, wenn man @PreAuthorize und @Secured nutzt, was hier nicht gemacht wird.
 

8u3631984

Bekanntes Mitglied
Also ich schicke hier mal einen Link zu einem Youtube Spring Boot Security Kurs - will keine Werbung machen. Aber dort wurde mir viele Sachen klarer :

Zu meinem Problem :
Java:
        http
                .csrf().disable()

Hier werde wohl Post, Delete request von Hause verboten. Erst wenn man csrf disabled funktioniert es. Eine Alternative ist wohl einen Token mitzuschicken. Muss ich mich wohl noch mal mit beschäftigen.

Aber zu deiner Frage @mrBrown :
Ich möchte dass alle Anfrage unter /api/v1/calendarUser/ nur von Nutzer mit der Rolle Admin zugänglich gemacht werden.
Java:
.antMatchers("/api/v1/calendarUser/**").hasRole("ADMIN")
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Security Login with Credentials Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring Security CSRF-Token Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring Security Probleme Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot + Vaadin API Security Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Buchempfehlung Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 17
iman Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 13
S Spring Security deaktivieren Frameworks - Spring, Play, Blade, Vaadin & Co 10
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
B Spring tools security mit JSP Frameworks - Spring, Play, Blade, Vaadin & Co 6
K Spring Security für Java SE Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Konfiguration von Spring Security für httpBasic Auth und jdbc Authentication. Frameworks - Spring, Play, Blade, Vaadin & Co 3
P Spring Security Token vs. Cookie Frameworks - Spring, Play, Blade, Vaadin & Co 0
I Security mit JBoss oder Spring oder... Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Security URLs erlauben Frameworks - Spring, Play, Blade, Vaadin & Co 0
K JSF 2.1 und Spring 3 Security Login mit RememberMe Frameworks - Spring, Play, Blade, Vaadin & Co 1
F.S.WhiTeY Spring Security Constrain: Allow connection from localhost always Frameworks - Spring, Play, Blade, Vaadin & Co 1
F Spring Security Beans Frameworks - Spring, Play, Blade, Vaadin & Co 7
E Fehlermeldung von Spring Security beim Einloggen Frameworks - Spring, Play, Blade, Vaadin & Co 1
B Security mit Spring oder Seam Frameworks - Spring, Play, Blade, Vaadin & Co 6
M Problem mit spring security Frameworks - Spring, Play, Blade, Vaadin & Co 0
C JSF 2.0 Spring Security 3 User eingeloggt? Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Webanwendung und Spring Security Ratschlag Frameworks - Spring, Play, Blade, Vaadin & Co 6
T JSF - Spring Security Integration Frameworks - Spring, Play, Blade, Vaadin & Co 0
G Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Security RMI Frameworks - Spring, Play, Blade, Vaadin & Co 2
I Spring Security: Login und danach Methode aufrufen. Nur wie?? Frameworks - Spring, Play, Blade, Vaadin & Co 0
G Spring Security Leerzeichen Frameworks - Spring, Play, Blade, Vaadin & Co 7
G Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 1
G Spring Security - Angemeldet bleiben Frameworks - Spring, Play, Blade, Vaadin & Co 4
G Spring Security Beispielprogramm [DRINGEND] Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Security 3 und JSF 2.0 Frameworks - Spring, Play, Blade, Vaadin & Co 5
G Spring Security Konfiguration Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Security Benutzer ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
P Spring Security mit Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 5
I Spring Security 404 Fehler bei Login -> Findet Seite nicht Frameworks - Spring, Play, Blade, Vaadin & Co 0
I Eigene Login Funktion bei Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
I Menüsteuerung mit Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 0
ARadauer Spring Security - Setting the SecurityContextHolder Contents Directly Frameworks - Spring, Play, Blade, Vaadin & Co 1
M JSF Navigation - Spring Security Logout Problem Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Security Tutorial ohne Web application Frameworks - Spring, Play, Blade, Vaadin & Co 4
MQue Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 12
R Spring Boot: Endpoint kann nicht gefunden werden (404) Frameworks - Spring, Play, Blade, Vaadin & Co 15
R Spring Boot läuft nicht auf Ubuntu Frameworks - Spring, Play, Blade, Vaadin & Co 6
OnDemand Spring Boot/Vaadin/Azure Session Speichern Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot seltsame Aufrufe zu Google Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Spring Boot Embedded mongo Frameworks - Spring, Play, Blade, Vaadin & Co 4
ExceptionOfExpectation Spring Boot Web Werten Übergabe Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Mehrere WebSocket-Instanzen in Spring Boot dynamisch bereitstellen Frameworks - Spring, Play, Blade, Vaadin & Co 0
R Spring Boot Tabellenverknüpfung Frameworks - Spring, Play, Blade, Vaadin & Co 1
W Kotlin: DB-Relationen in Spring Boot Data / Hibernate Frameworks - Spring, Play, Blade, Vaadin & Co 6
ExceptionOfExpectation Spring Boot Thymeleaf Input Type=radio für Enum Property Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12

Ähnliche Java Themen


Oben