줄무늬와 봄을 사용하여 웹 응용 프로그램을 만들고 있습니다. 로그인/인증 기능이 있어야합니다. 지금은 데이터베이스에 사용자 자격 증명과 별도로 사용자 정보를 저장합니다. 귀중한 암호를 전달하고 싶지 않기 때문에 내 사용자 모델에 자격 증명이 포함되어 있지 않습니다.봄과 줄무늬 보안 디자인
스프링은 모든 DAO를 관리합니다.
이제 비 컨테이너 기반 보안 시스템을 구현하고 있습니다. 암호의 sha-2 해시를 저장하고 양식에 제출 된 암호와 데이터베이스에 저장된 암호를 비교합니다. 이 비교는 테스트를 거쳐 작동합니다. 이걸 어떻게 연결하는지 알아 내려고 해요. 지금은 LoginActionBean이 로그인 요청을 포착하고 내부적으로 UserDAO를 사용하여 자격 증명을 검색하고 제출 된 매개 변수와 비교를 수행하는 "PasswordService"라는 싱글 톤을 사용합니다. 내 봄 콩은 다음과 같습니다
<bean id="passwordSerivce" class="com.example.store.authentication.PasswordService" factory-method="getInstance">
<property name="userDAO" ref="userDAO"/>
</bean>
그러나 다음 PasswordService 싱글은 필요 : 정말 (UserDAO는 인터페이스) 싱글에서 이해가되지 않습니다
public void setUserDAO(UserDAO userDAO) { ...}
방법.
적절한 디자인을 찾고 있습니다. ServiceLocators가 Spring이 발명 된 바로 그 이유라고 읽었습니다. 이견있는 사람?
내가 어떻게 설계 할 수 있는지 알고 싶습니다. 나는 사용자가 "로그인"을 클릭 할 때 호출되는 ActionBean을 가지고 있지만 실제로 어떻게 인증합니까? 인증 서비스를 빈에 주입합니까? 누구나 호출 할 수있는 싱글 톤을 만들 수 있습니까? LoginAcionBean이 Spring이 주입하는 제네릭 인터페이스가 있습니까? 제가 봄을 사용하지 않았다면 어떻게 될까요?
이 점에 대해 명확하게 알 수는 없지만 어떤 싱글 톤 작업을 수행 할 필요는 없습니다. 봄이 당신을 위해 모든 것을 해줍니다. 방금 봄 콩을 설정하면 모두 효과적으로 싱글 톤이됩니다. 비 싱글 톤 빈을 생성하려면 스프링을 얻으려면 추가 선회를해야합니다. – lumpynose
그것이 맞다고 생각하지 않는 이유는 싱글 톤 클래스가 "setUserDAO"메소드를 가지고 있기 때문입니다. 이것은 서비스를 사용하는 사람이 설정할 수 있습니다. 즉 누군가 기술적으로 null을 지정할 수 있습니다. 누군가를 "인증"하는 올바른 방법이 OOD 관점에서 무엇인지 궁금합니다. – djunforgetable
누구나 세터를 부를 수있는 문제에 대해 동의합니다. Gandalf의 생성자 응답은 내가 걱정할 때 사용합니다. 또한 setter를 비공개로 설정 한 다음 주석 (@Autowired)을 사용하면 스프링이 여전히 setter를 사용할 수 있습니다. 그것에 대해 긍정적이지 않습니다. 제 의견으로는 정말 대충 보입니다. – lumpynose