Я пытаюсь разрешить пользователям проходить аутентификацию через страницу входа в систему, а также через вызов API. В какой-то момент это работало, но после того, как я возился с кодом, я не могу вспомнить, не заставил ли меня что-то работать, что-то еще сломалось. Страница входа работает нормально, но вызов конечной точки с помощью curl дает мне ошибку 403. Это происходит в chain.doFilter () в AuthenticationFilter.
Заявление о завитке:
curl -XPOST "http:/localhost:8080/api/dothis" -H "accept: application/json" -F 'data=@path/to/cert'
MultipleSecurityConfig.java
@EnableWebSecurity
@Order(1)
public class MultipleSecurityConfig {
@Order(2)
@Configuration
public class ApiSecurityConfig extends WebSecurityConfigurerAdapter {
RestAuthenticationEntryPoint restAuthenticationEntryPoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint)
.and()
.antMatcher("/api/**").authorizeRequests()
.anyRequest().authenticated()
.and()
.addFilterBefore(new AuthenticationFilter(), BasicAuthenticationFilter.class);
}
}
@Configuration
public class LoginSecurityConfig extends WebSecurityConfigurerAdapter {
RestAuthenticationEntryPoint restAuthenticationEntryPoint;
String[] permitted = {
"/login",
"/error",
"/images/**"
};
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers(permitted).permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.loginPage("/login")
.defaultSuccessUrl("/swagger-ui.html", true)
.and()
.logout()
.clearAuthentication(true)
.logoutUrl("/logout")
.logoutSuccessUrl("/login").permitAll()
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true);
}
}
}
AuthenticationFilter.java
//optional default is POST
con.setRequestMethod("POST");
//add request header
con.setRequestProperty("Content-Type","application/json");
con.setRequestProperty("User-Agent", USER_AGENT);
System.out.println("\nSending 'POST' request to URL : " + URL);
con.setDoOutput(true);
con.setDoInput(true);
int responseCode = con.getResponseCode();
try( DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
wr.write(postData);
} catch(Exception e){
System.out.println(e.getMessage());
}
StringBuffer result = new StringBuffer();
System.out.println("Response Code : " + responseCode);
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
in.close();
}
else {
System.out.println("Error creating HTTPS connection");
System.out.println("Response Code: " + responseCode + ", Response Message: " + con.getResponseMessage());
result = null;
}
if(result.toString().contains("\"successful\": true")) {
http_response.setStatus(HttpServletResponse.SC_OK);
chain.doFilter(request, response);
}