Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Realizar uma transação jpa utilizando o id do usuário que está conectado na sessão

Boa noite,

Minha duvida é se o código abaixo é seguro. Tem alguma forma do usuário alterar a página html e alterar o valor do input hidden ?

Se esse código a baixo não for seguro, qual seria a maneira ideal de pegar o id do usuário que está conectado na session e realizar as transações do entity manager ?

<form action="${categories}" method="POST" >
            <div>
                <label for="cat_name"> Nome: </label>
                <input type="text" name="cat_name"/>
            </div>
            <security:authentication property="principal" var="user"/>
            <input type="hidden" name="cat_user" value="${user.user_id}"/>
            <input type="submit" value="Submit"/>
            <input type="hidden"  name="${_csrf.parameterName}"   value="${_csrf.token}"/>
 </form>

  @RequestMapping("/categories")
    public String saveCategory(CategoryForm catForm) {
        Category cat = catForm.build();
        System.out.println(cat);
        catDAO.save(cat);
        return "transactions/ok";
    }
1 resposta
solução!

Fala Bruno, tudo bem ?

Não é aconselhável usar um input pra reenviar id de usuário. Estando essa informação com o cliente, o usuário poderia editar seu html, alterar a propriedade value do input hidden e enviar outro valor.

Em geral os dados do usuário são mantidos na sessão no servidor justamente pra evitar esse tipo de problema com o tráfego de informações mais "sensíveis".

Voce poderia pedir a HttpSession no seu método do controller e buscar pelas chaves os attributos mantidos nela. Mas o Spring Security disponibiliza uma forma simples de acessar o objeto do usuário logado internamente.

@RequestMapping("/suaUrl")
public String suaAction(@AuthenticationPrincipal Usuario usuario) {
        ...
    Integer idUsuario = usuario.getId();
    return "suaView";
}

Espero ter ajudado. Abraço!