Gibt es eine Möglichkeit, die Basisauthentifizierung und die Formularanmeldung für denselben REST-Dienst einzurichten? Ich möchte eingeloggten Benutzer diesen Dienst sowohl durch Web-Browser nach dem Einloggen aktivieren und aus der Befehlszeile ausführen curl -u username:password hostname.com/api/process
Jetzt habe ich diesen Beitrag gesehen: Basic and form based authentication with Spring security Javaconfig aber es ist etwas anders als das, was ich versuche zu tun. Gibt es eine Möglichkeit, dies mit Feder einzurichten? Was ich jetzt habe, ist dies:Kombinieren der Basisauthentifizierung und Formularanmeldung für die gleiche REST Api
package com.my.company.my.app.security;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
import javax.sql.DataSource;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/js/**", "/css/**")
.permitAll();
http
.authorizeRequests()
.antMatchers("/api/**")
.authenticated()
.and()
.httpBasic();
http
.authorizeRequests()
.antMatchers("/","/index")
.authenticated()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/j_spring_security_check")
.defaultSuccessUrl("/monitor")
.failureUrl("/login?error")
.usernameParameter("j_username")
.passwordParameter("j_password")
.permitAll()
.and()
.logout()
.logoutUrl("/j_spring_security_logout")
.logoutSuccessUrl("/login?logout")
.permitAll()
.and()
.csrf()
.disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username=?")
.authoritiesByUsernameQuery("SELECT username, authority FROM authorities WHERE username=?");
}
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
}
Das einzige Problem ist, dass es nicht auf der Anmeldungsseite wird umgeleitet, wenn hostname.com/index
oder hostname.com/
statt Fenster Pop-ups für die grundlegenden Authentifizierungsinformationen aufgerufen wird gefragt.
danke für die Annahme der Antwort. Du könntest mir eine Stimme geben, wenn es dir nichts ausmacht! – SyntaX
Sicher Sache. Danke für Ihre Hilfe. –