Hallo, ich bin dabei dabei ein REST Backend mit Spring und Spring Security zu entwicklen. Ich versuche vor allem in Spring Security rein zu kommen. Ich will einen Endpoint haben, bei dem Client User und Passwort schickt. Diese sollen dann über die JDBC Authentifizierungsfunktion in meiner MySql Datenbank nachgeschaut werden. Ich versuche das ganze mit einem Test zu prüfen. Ich kriege vom Test anstatt des erwarteten 200er Status immer einen 401er zurück. Ich weiß nicht was ich genau falsch mache. Bin relativ neu in Spring und dankbar für alle Tipps. Bin mir auch etwas unschlüssig, wie und wo ich am besten in Spring Security reindebugge um zu sehen was falsch läuft.
Meine Security Config:
Die SQL Queries habe ich so in PHP Myadmin getestet. Funktionieren eigentlich.
Mein Testcode:
Meine Security Config:
Code:
@Configuration
@Import(DaoConfig.class)
@Order(2)
public static class HttpBasicAuthConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select username, password, 1 from account where username=?")
.authoritiesByUsernameQuery("select username, 'user' from account where username=?")
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/auth/login")
.authorizeRequests()
.anyRequest().hasAuthority("user")
.and().httpBasic()
.and().csrf().disable();
}
}
Mein Testcode:
Code:
@Autowired
private FilterChainProxy springSecurityFilterChain;
private MockMvc securityMockMvc;
@Before
public void SetupContext() {
securityMockMvc = MockMvcBuilders
.webAppContextSetup(wac)
.addFilters(springSecurityFilterChain)
.apply(springSecurity()).build();
}
@Test
public void testLoginHttpBasic() throws Exception {
MockHttpServletRequestBuilder post = post("/auth/login").with(httpBasic("frank","password"));
securityMockMvc.perform(post).andExpect(status().isOk());
}