Пароль и имя пользователя в разных коллекциях (Spring security) - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь реализовать аутентификацию с помощью Spring Security, и моя проблема в том, что я использую базу MongoDB, где имя пользователя и связанный пароль находятся в двух разных коллекциях.Поэтому, когда я реализую UserDetails, я не могу правильно вернуть пароль.Вот что я попробовал:

package com.example.springmongo.user;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

@Document(collection = "users")
public class User implements UserDetails {
    /**
     * 
     */
    private static final long serialVersionUID = -2217225560457250699L;

    @Autowired
    private UserPassService userPassService;

    @Id
    private String id;

    @Field(value = "iduser")
    private Long iduser;

    @Field(value = "name_complete")
    private String name_complete;

    @Field(value = "mail")
    private String mail;

    @Field(value = "active")
    private Double active;

    @Field(value = "creationDate")
    private String creationDate;

    @Field(value = "last_login")
    private String last_login;

    public User() {
        super();
    }

    public User(String id, Long iduser, String name_complete, String mail, Double active, String creationDate, String last_login) {
        super();
        this.id = id;
        this.iduser = iduser;
        this.name_complete = name_complete;
        this.mail = mail;
        this.active = active;
        this.creationDate = creationDate;
        this.last_login = last_login;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Long getIduser() {
        return iduser;
    }

    public void setIduser(Long iduser) {
        this.iduser = iduser;
    }

    public String getName_complete() {
        return name_complete;
    }

    public void setName_complete(String name_complete) {
        this.name_complete = name_complete;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public Double getActive() {
        return active;
    }

    public void setActive(Double active) {
        this.active = active;
    }

    public String getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(String creationDate) {
        this.creationDate = creationDate;
    }

    public String getLast_login() {
        return last_login;
    }

    public void setLast_login(String last_login) {
        this.last_login = last_login;
    }

    @Override
    public String toString() {
        return "name: " + this.name_complete + ", mail: " + this.mail + ", id: " + this.id;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getPassword() {
        return this.userPassService.getUserPassword(this.iduser);
    }

    @Override
    public String getUsername() {
        return this.getMail();
    }

    @Override
    public boolean isAccountNonExpired() {
        if (this.getActive() != null && this.getActive().equals(1.0)) {
            return true;
        }

        return false;
    }

    @Override
    public boolean isAccountNonLocked() {
        if (this.getActive() != null && this.getActive().equals(1.0)) {
            return true;
        }

        return false;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        if (this.getActive() != null && this.getActive().equals(1.0)) {
            return true;
        }

        return false;
    }

    @Override
    public boolean isEnabled() {
        if (this.getActive() != null && this.getActive().equals(1.0)) {
            return true;
        }

        return false;
    }
}

К сожалению, я не могу получить доступ к своему UserPassService от такой сущности.Так как я могу получить доступ к паролю?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Нельзя использовать @Autowired для компонентов пружины в классе сущности в качестве поля.Используйте как это;

private transient UserPassService userPassService;

и добавьте метод установки этого;

@Autowired
public void setUserPassService(UserPassService userPassService) {
    this.userPassService = userPassService;
}

Остерегайтесь создания класса Entity с new, что делает этот сервис нулевым.Если вы создаете с new, вызовите метод setUserPassService с автопроводным объектом UserPassService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...