문제

저는 Stripes와 Spring을 사용하여 웹 애플리케이션을 구축하고 있습니다.로그인/인증 기능이 필요합니다.지금은 사용자 자격 증명과 별도로 사용자 정보를 데이터베이스에 저장합니다.내 사용자 모델에는 귀중한 비밀번호를 전달하고 싶지 않기 때문에 자격 증명이 포함되어 있지 않습니다.

Spring은 모든 DAO를 관리합니다.

지금은 비컨테이너 기반의 보안 시스템을 구현하고 있습니다.비밀번호의 sha-2 해시를 저장하고 양식으로 제출된 비밀번호와 데이터베이스에 저장된 비밀번호를 비교합니다.이 비교는 테스트되었으며 작동합니다.나는 이것을 함께 연결하는 방법을 알아 내려고 노력하고 있습니다.지금은 로그인 요청을 포착하고 내부적으로 UserDAO를 사용하여 자격 증명을 검색하고 제출된 매개 변수와 비교를 수행하는 "PasswordService" 싱글톤을 사용하는 LoginActionBean이 있습니다.내 봄 콩은 다음과 같습니다

<bean id="passwordSerivce" class="com.example.store.authentication.PasswordService" factory-method="getInstance">
    <property name="userDAO" ref="userDAO"/>
</bean>

그러나 PasswordService 싱글톤에는 다음이 필요합니다.

public void setUserDAO(UserDAO userDAO) { ...}

싱글톤에서는 실제로 의미가 없는 메서드입니다(UserDAO는 인터페이스입니다).

적절한 디자인을 찾고 있어요.나는 ServiceLocator가 Spring이 발명된 바로 그 이유라는 것을 읽었습니다.이견있는 사람?

또한 이것을 어떻게 디자인할 수 있는지 알고 싶습니다.사용자가 "로그인"을 클릭할 때 호출되는 ActionBean이 있는데 실제로 인증하는 방법은 무엇입니까?인증 서비스를 Bean에 삽입합니까?누구나 호출할 수 있는 싱글톤을 만들 수 있나요?Spring이 주입하는 LoginAcionBean이 사용하는 일반 인터페이스가 있습니까?Spring을 사용하지 않았다면 어떻게 했을까요?

도움이 되었습니까?

해결책

  1. userdao를 주입하는 것이 왜 의미가 없는지 이해하지 못합니다.

  2. XML이 왜 공장에서 사용되는지 이해하지 못합니다 = "GetInstance"; 모든 인스턴스 재료와 싱글 톤 물건을 버릴 수 있습니다. Spring은 비밀번호 서비스 클래스의 단일 인스턴스를 인스턴스화하고 많은 클래스에 주입 할 수 있지만 모두 동일한 인스턴스를 얻을 수 있습니다. 그래서 봄은 당신을 위해 싱글 톤을 만들고 있습니다. 비밀번호 서비스 클래스는 간단한 pojo 일 수 있습니다. userdao 구현과 유사하게.

또한 봄 주석을보고 이해하고 사용하는 것이 좋습니다. 기본적으로 주입 될 클래스에서 @Service를 사용한 다음 주사 된 클래스의 세터에서 @autowired를 사용합니다. 또한 주석을 켜려면 XML 구성 파일에 무언가를 추가해야합니다.

다른 팁

위의 답변에 추가하여 DAO에 대한 설정자를 원하지 않으면 생성자 주입을 사용하십시오.

<bean id="passwordSerivce" class="...PasswordService">
   <constructor-arg ref="userDAO"/>
</bean>

빈이 당신이 제어하는 ​​클래스가 아닌 이상, 당신은 그것을 싱글톤으로 만들 필요가 없다. 스프링은 기본적으로 그렇게 할 것이다.

저는 개인적으로 주석을 좋아하지 않습니다.

내 해결책은 "인증"방법과 인터페이스를 갖는 것이 었습니다. 그런 다음 userdao 객체를 사용하는 생성자와 인터페이스를 구현하는 서비스 클래스를 만듭니다. 이런 식으로 서비스를 요구하는 객체는 인스턴스화를 수행하지 않으며 (스프링에 의해 수행됨) 기본 구현이 수행되는지 알지 못합니다 (LDAP, SSO, 간단한 암호 비교 등). 일을 끝내는 것 같습니다 : p

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top