Spring-MVC:使用用户密码加密/解密

时间:2015-03-02 13:09:59

标签: encryption authentication database bcrypt

  • 我正在使用一个Spring-MVC应用程序,它使用Hibernate作为 ORM和PostgreSQL作为数据库,我正在寻找 即时加密解密解决方案,但仅适用于2列 数据库,其余都可以保持非加密状态。我有一个人 实体,它有一个密码,我正在加密密码 BCrypt并将它们保存在数据库中。我理解一旦密码是BCrypt加密我无法解密它。我打算暂时放一个中间页,我会再次请求密码,并以某种格式保存,我可以用于即时加密 - 解密。

    • 如果可能,我想使用此密码加密/解密 用户登录后的那两列,并对这两列执行操作 列。

    • 当我使用Spring-Security时,我正在注入编码器bean Spring-Security可以登录用户。这是我如何拯救 密码和我的安全应用程序上下文。因为我刚开始 有了这个问题,这里粘贴的进展不是很多:

人物模型:

@Entity
@Table(name="person")
public class Person implements UserDetails{


@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "person_seq_gen")
@SequenceGenerator(name = "person_seq_gen",sequenceName = "person_seq")
private int id;

 @Valid
    @Email
    @Pattern(regexp = emailRegexp)
    @Column(name = "username")
    private String username;

@Valid
@NotEmpty(message = "Password may not be empty")
@Column(name = "password")
private String password;

// getters and setters ommitted }

PersonServiceImpl:

@Override
    @Transactional
    public boolean addPerson(Person p) {

        Person existingUser = personDAO.findPersonByUsername(p.getUsername());
        if(existingUser == null) {
            this.personDAO.addPerson(p);
            p.setAccountstatus(false);
            p.setOnetimeemail(false);
            p.setUsername(p.getUsername().toLowerCase());
// as you can see I am encrypting the password and saving in DB, I don't know how to access the plain password at this point to use in some algorithm for on-the-fly encryption/decryption
            p.setPassword(BCrypt.hashpw(p.getPassword(), BCrypt.gensalt(11)));
            p.setUsername(p.getUsername().toLowerCase());
            this.personDAO.addPerson(p);
            sendAccountActivationEmail(p.getUsername(), p.getFirstName());
            return true;
        } else {
            return  false;
        }
    }

安全的应用程序-context.xml中

<beans:bean id="encoder"
                class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
        <beans:constructor-arg name="strength" value="11" />
    </beans:bean>

    <beans:bean id="daoAuthenticationProvider"
                class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
                <beans:property name="userDetailsService" ref="LoginServiceImpl"/>
               <beans:property name="passwordEncoder" ref="encoder"/>
    </beans:bean>

任何指针,帮助都会很好。如果有任何不清楚的地方,请告诉我。非常感谢。

0 个答案:

没有答案