Spring mvc SpringSecurity4自定义jdbc身份验证

Spring mvc SpringSecurity4自定义jdbc身份验证,spring-mvc,spring-security,spring-jdbc,Spring Mvc,Spring Security,Spring Jdbc,我正在使用SpringBoot、SpringMVC4、SpringSecurity4和mysql作为新web应用程序的数据存储,我有两个问题 我以前从未使用过spring security,但看到它之后,我对用于查找用户权限的查询提出了一个问题:为什么它使用用户名而不是用户id。我的意思是,基于用户id搜索权限要快得多,并且可以在将来更改用户名。我试图重载UsersBySernameQuery和authoritiesByUsernameQuery,但使用了用户id,但没有起作用(即使它起作用,方

我正在使用SpringBoot、SpringMVC4、SpringSecurity4和mysql作为新web应用程序的数据存储,我有两个问题

  • 我以前从未使用过spring security,但看到它之后,我对用于查找用户权限的查询提出了一个问题:为什么它使用用户名而不是用户id。我的意思是,基于用户id搜索权限要快得多,并且可以在将来更改用户名。我试图重载UsersBySernameQuery和authoritiesByUsernameQuery,但使用了用户id,但没有起作用(即使它起作用,方法的名称也在困扰我)。。有人能解释一下他们为什么使用用户名吗

  • 在我之前开发的php web应用程序中,如果我们想使用BCrypt,我们通常会将salt和密码一起存储在数据库中。。但我注意到,春季不需要有这个专栏。。加密的salt部分也是如此,Spring内部知道如何使用它,所以我不必担心迭代次数、成本和salt存储

  • 1) 我不理解这个问题,因为如果你必须找到一个名为“昆汀”的用户的权限,你如何知道“昆汀”的id

    请查看我用于在登录时检索用户的查询

    <authentication-manager>
            <authentication-provider>
                <jdbc-user-service data-source-ref="dataSource"
                    users-by-username-query="SELECT username, password, CASE enabled WHEN 1 THEN 'true' ELSE 'false' END 'enabled' FROM users WHERE BINARY username=?"
                    authorities-by-username-query="SELECT username, authority FROM users WHERE BINARY username=?"
                    id="jdbcUserService" />
                <password-encoder ref="passwordEncoder" hash="bcrypt" />
            </authentication-provider>
        </authentication-manager>
    <beans:bean id="passwordEncoder"
        class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
    

    关于如何做到这一点

    请每次提问一个问题。