4
votes

I have been trying out different things with Spring security to learn. I set up a authorization with basic structure that have "users" table and "authorities" table. So my authentication-provider looks like following.

    <authentication-provider>
        <password-encoder hash='md5'>
            <salt-source user-property="username"/>
        </password-encoder> 
        <jdbc-user-service data-source-ref="dataSource"/>
    </authentication-provider>

In this way I don't specify query to fetch user details because I use default database schema. So though I'm not using a "authorities-by-username-query" attribute Spring is using default queries( "select username, authority from authorities where username = ?" and "select username, password, enabled from users where username = ?") So things working well.

Now I want to try with authority groups. So I create tables according to schema. My question how to activate group authority? API documentation for JdbcDaoImpl says to use "enableGroups" property to enable "group-based authorities". but "group-based authorities" doesn't have such property. Since Spring has the default query I think no need of explicitly give it.

So can someone help me here to enable group based authorities with default query.

1

1 Answers

5
votes

Unfortunately jdbc-user-service do not provide access to enableGroups property. So you must configure this bean manually using spring's bean namespace. I think you can try something like this:

<authentication-provider user-service-ref="jdbcDaoImpl">
    <password-encoder hash='md5'>
        <salt-source user-property="username"/>
    </password-encoder> 
</authentication-provider>


<beans:bean id="jdbcDaoImpl" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
    <property name="enableGroups" value="true" />
    <property name="enableAuthorities" value="false" />
    <property name="dataSource" ref="dataSource" />
</beans:bean>