OLá bom dia.
Tenho uma aplicação web com Spring MVC e existe uma necessidade de um cliente consumir um serviço, criei então no mesmo projeto um recurso mapeado com RestController, ao testar o serviço usando como client o Postman me deparei com um problema, como resposta veio o html da pagina de login e não os dados como json.
No Postman eu configurei a Authorization do tipo Basic informei usuario e senha julguei que com isto estaria tudo ok
Não seria possível ter um recurso Rest na mesma aplicação?
Atualizado em 01/02/2019
Passei o dia de ontem estudando sobre o Spring Security e entendi que sim posso criar uma configuração para o caso estou colocando abaixo como ficou a minha classe de configuração no entanto ainda não ta ok , ta com o mesmo comportamento mais entendi que eu posso ter varias instancias de WebSecurityConfigurerAdapter e foi o que eu fiz tentando ter um tipo de autenticação para a minha API e quando não a autenticação normal pelo formulário de login mais ainda não ta rolando no postman recebo ainda o html do formulário de login
@EnableWebSecurity
@ComponentScan(basePackageClasses = AppUserDetailsService.class)
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//@Autowired
//private RestAuthenticationEntryPoint authenticationEntryPoint;
@Bean
public static PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Configuration
@Order(2)
public static class AppWebConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/resources/**");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/images/**", "/javascripts/**", "/layout/**", "/stylesheets/**", "/h2-console/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.and()
.exceptionHandling()
.accessDeniedPage("/403")
.and()
.sessionManagement()
.invalidSessionUrl("/login");
}
}
@Configuration
@Order(1)
public static class ApiWebConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password("admin").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic()
.and()
.csrf().disable();
}
@Bean
public AuthenticationEntryPoint authenticationEntryPoint(){
BasicAuthenticationEntryPoint entryPoint = new BasicAuthenticationEntryPoint();
entryPoint.setRealmName("admin realm");
return entryPoint;
}
}