No puedo hacer que Spring Security funcione. Probé mi aplicación con security:user-service y funciona perfectamente. Sin embargo, cuando reemplace el

<security:user-service>
    <security:user name="XX" password="XX" authorities="ROLE_EDITOR" />                
</security:user-service>

Con

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider>
        <security:jdbc-user-service data-source-ref="dataSource" 
            users-by-username-query="SELECT name as username, password, 1 as enabled FROM cuser WHERE name=?;"
            authorities-by-username-query="SELECT u.name as username, r.name as authority FROM cuser u join cuserrole ur on ur.iduser=u.id join crole r on r.id=ur.idrole where u.name=?;" />
    </security:authentication-provider>
</security:authentication-manager>

Ya no puedo hacer que funcione. Sigue recibiendo una respuesta 403 del servidor. Ejecuté las consultas en mi base de datos y devuelven los valores esperados.

Tampoco puedo hacer que el registro funcione, por lo que me resulta difícil depurar lo que realmente está sucediendo detrás de escena. Leí problemas similares en SO

¿Cómo habilito el registro para Spring Security?

Configuración de Spring de depuración

Probé las soluciones pero aún así el registro no funciona. Si alguien tiene alguna idea, su ayuda es apreciada.

-1
user2745862 17 ene. 2017 a las 18:54

2 respuestas

No puedo creerlo ...

Spring requiere el prefijo ROLE_ para que la seguridad funcione. Debido a esto, estaba obteniendo 403.

0
user2745862 17 ene. 2017 a las 19:08
Sin embargo, ¿podría alguien decirme por qué el prefijo ROLE_? gracias ¿No puedo usar mi nombre de rol hecho a mano?
 – 
user2745862
17 ene. 2017 a las 19:08

Clase RoleVoter tiene un establecedor para la propiedad rolePrefix

public class RoleVoter implements AccessDecisionVoter<Object> {
    // ~ Instance fields
    // ================================================================================================

    private String rolePrefix = "ROLE_";

    // ~ Methods
    // ========================================================================================================

    public String getRolePrefix() {
        return rolePrefix;
    }

    /**
     * Allows the default role prefix of <code>ROLE_</code> to be overridden. May be set
     * to an empty value, although this is usually not desirable.
     *
     * @param rolePrefix the new prefix
     */
    public void setRolePrefix(String rolePrefix) {
        this.rolePrefix = rolePrefix;
}

Por lo tanto, puede establecer esta propiedad en un RoleVoter y luego establecerla en AccessDecissionManager y configurarla como access-decission-manager-ref en la configuración http de seguridad de primavera

0
jlumietu 18 ene. 2017 a las 01:47