相关疑难解决方法(0)

如何使用Spring Security的新PasswordEncoder

从Spring Security 3.1.4.RELEASE开始,旧的org.springframework.security.authentication.encoding.PasswordEncoder 已经被弃用org.springframework.security.crypto.password.PasswordEncoder.由于我的应用尚未向公众发布,我决定转向新的,而不是弃用的API.

到目前为止,我有一个ReflectionSaltSource自动使用用户的注册日期作为每用户盐密码.

String encodedPassword = passwordEncoder.encodePassword(rawPassword, saltSource.getSalt(user));
Run Code Online (Sandbox Code Playgroud)

在登录过程中,Spring还使用我的bean来验证用户是否可以登录.我无法在新密码编码器中实现这一点,因为SHA-1的默认实现 - StandardPasswordEncoder只能添加全局编码器创建过程中的秘密盐.

有没有合理的方法如何使用未弃用的API进行设置?

java spring spring-security

55
推荐指数
3
解决办法
10万
查看次数

Spring Security加密MD5

我有一个使用spring框架和spring安全性的java Web应用程序进行登录.在我的数据库中,我在保存之前将我的密码加密到MD5.我在application-config.xml中添加了这段代码

 <security:authentication-provider>
<security:password-encoder hash="md5"/>
<security:jdbc-user-service
        data-source-ref="dataSource"
        users-by-username-query="select user_name username, user_password password, 1 enabled from users where user_name=?"
        authorities-by-username-query="select username, authority from authorities where username=?" />
</security:authentication-provider>
Run Code Online (Sandbox Code Playgroud)

起初它在数据库中的密码未加密时起作用.但是当我加密它并在我的应用程序配置中添加了这个片段

      <security:password-encoder hash="md5"/>
Run Code Online (Sandbox Code Playgroud)

我无法登录.

encryption passwords spring-security

16
推荐指数
3
解决办法
4万
查看次数

UserDetails getPassword在spring security 3.1中返回null.如何获取当前登录用户的密码?

我已经使用spring security实现了更改密码功能,但((UserDetails)principal).getPassword())为登录用户返回null.

如果我没记错的话,过去常常在3.0中使用.这是在3.1中更改,以便无法检索登录用户的当前密码?

在下面的代码中,我正在检查从网页输入的用户密码中的当前密码.然后我检查登录用户的密码是否与输入的密码匹配.如果是,那么我想设置oldPasswordMatchNewPassword = true.

我该如何实现此功能?

@RequestMapping(value = "/account/changePassword.do", method = RequestMethod.POST)
    public String submitChangePasswordPage(
            @RequestParam("oldpassword") String oldPassword,
            @RequestParam("password") String newPassword) {
        Object principal = SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal();
        String username = principal.toString();
        if (principal instanceof UserDetails) {
            username = ((UserDetails) principal).getUsername();
            System.out.println("username: " + username);
            System.out.println("password: "
                    + ((UserDetails) principal).getPassword());
            if (((UserDetails) principal).getPassword() != null) {
                if (((UserDetails) principal).getPassword().equals(oldPassword)) {
                    oldPasswordMatchNewPassword = true;
                }
            }
        }
    if (oldPasswordMatchNewPassword == true) {
        logger.info("Old password matches new password. Password will be updated."); …
Run Code Online (Sandbox Code Playgroud)

spring spring-security

13
推荐指数
2
解决办法
1万
查看次数

用于自定义UserDetails的Spring Security salt

我想加盐如:

PasswordEncoder encoder = new ShaPasswordEncoder();
        userDetails.setPassword(encoder.encodePassword(userDetails.getPassword(),saltSource.getSalt(userDetails));
Run Code Online (Sandbox Code Playgroud)

到目前为止userDetails我的自定义UserDetail类的实例,我不得不把它投射到这个Spring类:UserDetails ,但是从逻辑上预期我得到了运行时:

java.lang.ClassCastException: model.UserDetails cannot be cast to org.springframework.security.core.userdetails.UserDetails
Run Code Online (Sandbox Code Playgroud)

配置:

<beans:bean id="saultSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
        <beans:property name="userPropertyToUse" value="username"/>
</beans:bean>

<authentication-manager alias="authenticationManager">
<authentication-provider>
<password-encoder hash="sha">
    <salt-source user-property="username"/>
</password-encoder>
    <jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何正确配置

configuration salt spring-security details

6
推荐指数
1
解决办法
8052
查看次数