Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida em "security:authentication property="principal.username""

No começo das aulas em spring security eu usei a tag

<a href="#">
<security:authentication property="principal" var="usuario"/>
        Usuário: ${usuario.username}
    </a>

E ele mostrava o username, no caso o email "admin@casadocodigo.com.br".

Agora no final das aulas eu percebi que a pagina estava exibindo a senha codificada. Então eu fiz um teste:

<a href="#"> <security:authentication
property="principal" var="usuario" /> Usuário:
${usuario.password}
</a>

saida: Usuário:$2a$04$qP517gz1KNVEJUTCkUQCY.JzEoXzHFjLAhPQjrg5iP6Z/UmWjvUhq

href#1 para quando eu olhasse no inspector de ter certeza de estar atualizado

<a href="#1">
<security:authentication
property="principal" var="usuario" /> Usuário:
${usuario.username}
</a>

saida: Usuário:$2a$04$qP517gz1KNVEJUTCkUQCY.JzEoXzHFjLAhPQjrg5iP6Z/UmWjvUhq

<a href="#2"> 
<security:authentication
property="principal" var="usuario" /> Usuário:
${usuario.email}
</a>

saida: Usuário: admin@casadocodigo.com.br

Por que o meu projeto esta diferente? Será por causa de que coloquei versões mais recente no pom.xml do que se pede nas aulas?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.casadocodigo</groupId>
    <artifactId>casadocodigo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <build>
        <finalName>casadocodigo</finalName>
    </build>
    <properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>8.5.9</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl-impl</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.6.1</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.3.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.15</version>
        </dependency>


        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.1</version>
        </dependency>

        <!-- Cache guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>


        <!-- Spring security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>



    </dependencies>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>
4 respostas

Fala Rodrigo, tudo bem ?

Não entendi porque o seu projeto estaria diferente. O uso da tag authentication continua o mesmo.

<security:authentication 
property="principal" var="usuario" />

Aqui a tag te ajuda a expor uma variável na página que guarda a referência do principal que em outras palavras é o seu usuário que está na sessão.

A partir daí o uso da variável pra acessar suas propriedades é comum. Por meio da especificação de Expression Language podemos acessar a variável e acessar seus métodos, ou mesmo inferir para os getters como geralmente é feito.

${usuario.nome} //aqui internamente estamos invocando o getNome();
${usuario.username} //aqui invocamos o getUsername() do usuário
${usuario.password} //aqui o getPassword()

O que vai definir o que pode ser invocado é a interface da sua classe Usuário, o seu bean.

Espero ter ajudado. Abraço!

Só para ver se eu entendi.

${usuario.nome}

Chama o meu getNome() da classe usuario. (No meu caso getEmail() do meu usuario)

${usuario.username}
${usuario.password}

Chama o getUsername() e getPassword() que foi utilizado no form do login.

É isso?

Esse problema de estar mostrando uma resposta errada pode ser culpa de configuração do eclipse ou algo do tipo?

Pois estou tendo um problema de ter que fazer "Build Project", "clean" e "clean tomcat work directory" toda vez que faço alguma alteração no projeto, caso contrario o projeto exibido do localhost não é atualizado.

solução!

Oi Rodrigo,

Então, quando usamos EL ${usuario.atributo} internamente estamos chamando o get desse atributo. No exemplo anterior getNome(), getUsername() e getPassword().

Tente não pensar em relação ao que foi usado no form. Lembre-se que os dados que foram passados no form o Security já utilizou, e buscou um objeto usuário equivalente aos dados de acesso. É este objeto usuário que está logado na sessão, com os dados que vieram da base, que você está utilizando ao chamar ${usuario.atributo}.

Sobre o eclipse, pode sim ocorrer problemas no build do projeto. O browser pode não ter recarregado o novo conteúdo do JSP, usando algum cache, pode ocorrer. Tente fazer com que o plugin do eclipse utilize a pasta padrão de instalação do Tomcat na sua máquina, pode ajudar. Servers > seu servidor > Server Locations > Use Tomcat Installation.

Abraço!

Entendi! Obrigado pela ajuda. Vou tentar essa fazer isso que você falou no eclipse. Obrigado!