2
respostas

403 Forbidden

Já vi as outras dúvidas do forum, mas mesmo assim não consegui resolver.

package br.com.alura.forum.config

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.security.authentication.dao.DaoAuthenticationProvider
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.http.SessionCreationPolicy
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
import org.springframework.security.crypto.password.PasswordEncoder
import org.springframework.security.web.DefaultSecurityFilterChain
import org.springframework.security.web.SecurityFilterChain

@Configuration
@EnableWebSecurity
class SecurityConfiguration(
    private val userDetailsService: UserDetailsService
) {

    @Bean
    fun filterChain(http: HttpSecurity): SecurityFilterChain? {
        return http.csrf {
            it.disable()
        }.authorizeHttpRequests {
            it.anyRequest().authenticated()
        }.sessionManagement {
            it.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        }.formLogin{
            it.disable()
        }.build()
    }

    @Bean
    fun encoder(): PasswordEncoder?{
        return BCryptPasswordEncoder()
    }

    @Bean
    fun configure(auth: AuthenticationManagerBuilder?): DaoAuthenticationProvider {
        val authProvider = DaoAuthenticationProvider()
        authProvider.setUserDetailsService(userDetailsService)
        authProvider.setPasswordEncoder(encoder())
//        auth?.userDetailsService(userDetailsService)?.passwordEncoder(encoder())
        return authProvider
    }
}
package br.com.alura.forum.services

import br.com.alura.forum.model.Usuario
import org.springframework.security.core.userdetails.UserDetails

class UserDetail(
    private val usuario: Usuario
) : UserDetails {
    override fun getAuthorities() = null

    override fun getPassword() = usuario.password

    override fun getUsername() = usuario.email

    override fun isAccountNonExpired() = true

    override fun isAccountNonLocked() = true

    override fun isCredentialsNonExpired() = true

    override fun isEnabled() = true
}
package br.com.alura.forum.services

import br.com.alura.forum.exception.NotFoundException
import br.com.alura.forum.model.Usuario
import br.com.alura.forum.repository.UsuarioRepository
import org.springframework.data.repository.findByIdOrNull
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.stereotype.Service
import java.util.UUID

@Service
class UsuarioService(
    private val usuarioRepository: UsuarioRepository,
    private val notFoundMessage: String = "Usuario não encontrado"
) : UserDetailsService {

    fun buscaPorId(id: Long): Usuario{
        return usuarioRepository.findById(id).orElseThrow { NotFoundException(message = notFoundMessage) }
    }

    override fun loadUserByUsername(username: String?): UserDetails {
        val usuario = usuarioRepository.findByEmail(username) ?: throw RuntimeException()
        return UserDetail(usuario)
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá, Jean! Tudo bem?

Pelo que entendi, você está tendo problemas com o erro 403 Forbidden, certo? Vamos tentar resolver isso juntos.

Pelo que pude observar, na sua classe SecurityConfiguration, você está autenticando todas as requisições com .anyRequest().authenticated(). Isso significa que todas as requisições para o seu servidor precisam estar autenticadas, ou seja, o usuário precisa estar logado.

No entanto, na imagem que você compartilhou, parece que você está tentando acessar a rota /topicos sem fornecer nenhum tipo de autenticação. Isso pode ser a causa do erro 403 Forbidden, já que a rota está configurada para exigir autenticação.

Uma possível solução seria permitir o acesso não autenticado a algumas rotas específicas. No seu caso, se você quiser permitir o acesso não autenticado à rota /topicos, você pode fazer isso alterando a configuração de segurança para algo como:

http.authorizeRequests {
    it.antMatchers("/topicos").permitAll()
    it.anyRequest().authenticated()
}

Dessa forma, estamos dizendo ao Spring Security para permitir todas as requisições para a rota /topicos, independentemente de estarem autenticadas ou não. Todas as outras requisições ainda precisarão de autenticação.

Lembre-se, essa é apenas uma sugestão e pode não ser a solução perfeita para o seu problema. Recomendo que você teste e veja se isso resolve o problema. Caso contrário, por favor, forneça mais detalhes para que possamos ajudá-lo melhor.

Espero ter ajudado e bons estudos!

Tem esse usuário cadastrado. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Na imagem tem eu passando a autorização. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software