/ / Como fazer a representação na primavera - java, spring-mvc, spring-security, personificação

Como fazer a representação na primavera - java, spring-mvc, spring-security, personificação

Temos vários portais Portal do empregador,Portal do funcionário e portal do administrador Todos os três portais são implantados separadamente. Todos os portais seguem o padrão primavera-mvc. E usamos a segurança de primavera e o uso do openId para login e logout.

Agora, queremos fornecer ao recurso admin-portal que o administrador possa se passar por funcionário e empregador e fazer as coisas em seu nome.

Qualquer pessoa com experiência anterior pode orientar minha maneira de trabalhar nela, ou pode compartilhar qualquer artigo que eu possa ler para obter um bom conhecimento sobre ela.

Obrigado,

Respostas:

0 para resposta № 1

De sua pergunta, não soa como você quer realmente "runAsManager".

Uma maneira seria usar algo como um método "impersonate", que por sua vez precisaria ser protegido, é claro, talvez usando anotações de segurança em nível de método.

Para isso, você pode usar algo como:

@PreAuthorize("hasRole("ROLE_ADMIN")")

Essencialmente, o que você precisa fazer é criar um objeto de autenticação e preencher o contexto de segurança (ThreadLocal) com isso.

Algo como:

Authentication other = createAuthentication(someUsername); //Implement this
SecurityContextHolder.getContext().setAuthentication(other);

Eu posso ver o apelo desta abordagem, mas deClaro, se é ou não uma boa idéia depende do que você está permitindo que os administradores façam em nome do usuário. Gastar seu dinheiro? Ver seus e-mails? Se o caso de uso é válido, pelo menos, auditar este tipo de operação.

Uma vez representado por outro usuário como este, o usuário atual precisará efetuar logout e login novamente para voltar para sua própria conta.