Я уже ломаю голову над этим на пару дней. Backstory is, я использую Spring Boot с зависимостью spring-boot-starter-security
для аспекта безопасности. Я пытаюсь создать веб-службу REST, которая должна отвечать только JSON (или XML, если я также решила реализовать это). Я могу вернуть ресурсы и работать с URI, поэтому проблем нет. У меня даже есть проверка подлинности объекта json в безопасности.Spring Boot Security Вход в систему (v4)
Итак, вот моя проблема. Когда несанкционированный пользователь пытается получить доступ к ограниченному ресурсу, Spring Security предоставляет страницу входа (HTML). Это проблематично. Я просто хочу, чтобы он возвратил 401 и, возможно, объект ошибки JSON по моему выбору. То же самое с успешными входами. Я не хочу, чтобы он перенаправлялся. И особенно не подготовленная HTML-страница.
Я искал учебники, и все упоминают, используя AuthenticationEntryPoint
и т. Д. Для управления потоком. НО! У меня этого нет. По-видимому, этот метод больше не существует для класса HttpSecurity. У кого-нибудь есть ответ? Вот соответствующий код, я буду поставлять больше, если вам это нужно.
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
private JsonAuthenticationFilter authFilter;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
authFilter = new JsonAuthenticationFilter();
authFilter.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login","POST"));
authFilter.setAuthenticationManager(this.authenticationManagerBean());
httpSecurity
.addFilterBefore(authFilter, UsernamePasswordAuthenticationFilter.class)
.csrf()
.disable()
.formLogin()
.permitAll()
.loginProcessingUrl("/login")
.failureUrl("/error")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.permitAll()
.logoutUrl("/logout")
.and()
.authorizeRequests()
.antMatchers("/", "/version")
.permitAll()
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
}
И зависимостей Maven ...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
</dependency>
</dependencies>
Будет ли отключить блок formLogin избавиться от обработки URL? Мне нравится, что весна просто вводит объект json POST-ed в/login автоматически. – CP510
HOLY C *** ЭТО РАБОТАЕТ. Это просто не задокументировано? Или я просто сосать при чтении документов? – CP510
Это задокументировано, но не в документации весеннего ботинка. Вы должны прочитать весеннюю справочную документацию по безопасности, которая очень тщательна. –