REST em sistema WEB
02/02/2019 11:56
0
Prezados bom dia, 

Meu nome é Robson venho como programador/desenvolvedor desde os tempos do clipper mais sempre atuando no Desktop com o MS-VFP.
Estava procurando um grupo especificamente sobre Spring, tenho sempre recorrido ao GUJ e pt.stackoverflow mais como tenho me dedicando a este Framework porque já há algum tempo venho estudando java um grupo e esta é minha primeira postagem.

Bem o meu problema é tenho uma aplicação Web com SB + Security + Thymeleaf  que esta funcionando ok, posteriormente veio a necessidade de expor um recurso REST , por ser apenas um recurso não imaginei que haveria problemas em fazer dentro da aplicação e não uma API separado apenas para o REST , então criei o recurso mapeei ele com @Restcontroller e teste, para minha surpresa ( de principiante ) no teste usando o postman veio retornado no GET o html da pagina de login, tudo bem entendi que precisava estudar mais....

Estudando sobre o Security e entendi que sim posso criar uma configuração de autenticação para a minha API e quando não a outra pelo formulário de login, ou seja para o sistema WEB e para a API REST, minha classe de configuração no entanto ainda não ta ok, configurei duas instancias de WebSecurityConfigurerAdapter mais ainda não ta rolando no postman recebo ainda o html do formulário de login, onde posso estar errando, ou sera que não rola o que eu estou fazendo? ou sera que a solução não é como eu estou pensando?

Alguém que já fez algo parecido poderia dar uma ajuda, indicar alguma literatura.... 

[code]@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;
}
}

[/code]
[code]@RestController@RequestMapping(value = "/api/produtos")
public class ProdutosResources {

@Autowired
private ProdutoService service;

@GetMapping
public ResponseEntity<List<Produto>> listar(){

return ResponseEntity.status(HttpStatus.OK).
body(service.findAll());
}

@GetMapping("/{id}")
public ResponseEntity<?> buscarPorId(@PathVariable Long id){

Optional<Produto> entidade = service.findById(id);

return ResponseEntity.status(HttpStatus.OK).body(entidade);
}
}
?
[/code]
Tags: Spring, Security, Rest


Ainda não faz parte da comunidade???

Para se registrar, clique aqui.

Podcast da itexto



Aprenda Groovy e Grails, Spring e mais com a Formação itexto!

Livro de Spring


/dev/All

Os melhores blogs de TI
em um único lugar!

 
Spring Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.