Eu tenho um problema onde eu não posso ace qualquer url enquanto estiver conectado em um accont, com um papel definido personalizado.
Para criar os novos papéis para o meu aplicativo, eu adicionei meus novos papéis na AuthoritiesConstants
classe e no authorities.csv
. Então eu inserido manualmente minhas novas funções desejadas: ROLE_STUDENT
e ROLE_PROFESOR
na minha h2-banco de dados.
Então eu entrei na conta de administrador e tentou e conseguiu criar um novo usuário com o ROLE_STUDENT
. Então eu conectado a essa nova conta e tentou acessar http://localhost:9000/api/users
para obter a lista completa de usuários. Eu tenho o seguinte erro:
2020-03-19 10:59:05.687 DEBUG 13892 --- [ XNIO-1 task-15] base.aop.logging.LoggingAspect : Enter: base.repository.CustomAuditEventRepository.add() with argument[s] = [AuditEvent [timestamp=2020-03-19T08:59:05.686Z, principal=anonymousUser, type=AUTHORIZATION_FAILURE, data={details=org.springframework.security.web.authentication.WebAuthenticationDetails@b364: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: null, type=org.springframework.security.access.AccessDeniedException, message=Access is denied}]]
2020-03-19 10:59:05.691 DEBUG 13892 --- [ XNIO-1 task-15] base.aop.logging.LoggingAspect : Exit: base.repository.CustomAuditEventRepository.add() with result = null
2020-03-19 10:59:05.693 WARN 13892 --- [ XNIO-1 task-15] o.z.problem.spring.common.AdviceTraits : Unauthorized: Full authentication is required to access this resource
2020-03-19 10:59:05.695 WARN 13892 --- [ XNIO-1 task-15] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.security.authentication.InsufficientAuthenticationException: Full authentication is required to access this resource]
Na minha SecurityConfiguration
classe, este url cai sob .antMatchers("/api/**").authenticated()
. Então, eu deveria ser capaz de acessá-lo de qualquer conta, enquanto eu estou logado.
Para meu espanto, parece que eu não pode acessar qualquer URL, além da home page, a partir desta conta. Eu verifiquei manualmente meu banco de dados para ver se o usuário foi criado e tem a função correta. Tudo está bem lá. alguém ajuda pode me resolver isso?
Você tem que abrir as rotas para os novos papéis também, isso é feito no lado do cliente. Isso é mais ou menos como ele olha, se você usar angular.
O componente de casa é aberto a qualquer pessoa como você pode ver no arquivo home.route.ts
.
export const HOME_ROUTE: Route = {
path: '',
component: HomeComponent,
data: {
authorities: [], // <- Empty, so anyone can access the home
pageTitle: 'home.title'
}
};
Por outro lado, se você quiser conceder acesso a um novo papel em um componente regular, você vai ter que adicioná-lo à matriz autoridades válido em seu [entity-name].route.ts
.
export const fooRoute: Routes = [
{
...
data: {
authorities: ['ROLE_STUDENT', 'ROLE_PROFESOR'],
...
},
...
Que dá acesso a qualquer usuário que tenha qualquer ROLE_STUDENT
ou ROLE_PROFESOR
, mas não usuários regulares (que só tem ROLE_USER
). Este foi apenas um exemplo.
Em qualquer caso, se eu entendi sua pergunta corretamente, você estava tentando acessar um api/...
mapeamento diretamente no seu navegador. Isso não é uma boa idéia e é bom que ele falhar uma vez que o cliente geralmente adiciona material para a maioria dos pedidos para que sejam devidamente tratados e validados pelo servidor ( XSRF
, auth token
...).