0

그래서 현재 스프링 장치 테스트 응용 프로그램이 있습니다. 그리고 외부 인증 소스에서 세션 쿠키를 가져와야합니다. 문제는 이것이 무엇인지,이 인증 프로세스는 상당히 비싸고 시간이 많이 걸리고 어떤 하위 클래스에 의해서도 한 번만 인증을 받고 이후의 하위 클래스가 생성 된 구조를 만들려고합니다.이 세션 쿠키는 인증을 거치지 않고 재사용됩니다. 다시 처리하십시오.서브 클래스 중 공유 변수의 더 나은 구현은 무엇입니까

지금 내 문제는 정적 쿠키가 다른 하위 클래스가 생성 될 때마다 null입니다. 그리고 정적 변수를 전역 변수로 사용하는 것은 좋지 않은 생각이지만, 런타임 중에 스프링 프레임 워크 설정 때문에 다른 방법을 생각할 수 없으며 다른 모든 클래스가 그걸 써.

또 다른 정보. 변수는 사용 중이지만 런타임 중에 변경할 수 있습니다. 한 명의 사용자가 로그인하여 사용하는 것은 아닙니다. 그러나 Sub1처럼 로그인을 호출하면 쿠키가 생깁니다. 그런 다음 SubX가 들어 와서 다른 인증 정보를 사용할 때까지 여러 번 테스트를 통해 해당 로그인 정보가 사용되므로 다른 정보로 로그인해야합니다. 그리고 반복합니다.

public class Parent implements InitializingBean { 
    protected static String BASE_URL; 
    public static Cookie cookie; 

    ... All default InitializingBean methods ... 

    afterPropertiesSet() { 
    cookie = // login process returns a cookie 
    } 
} 

public class Sub1 extends Parent { 
    @resource public String baseURL; 

    @PostConstruct 
    public void init() { 
    // set parents with my baseURL; 
    BASE_URL = baseURL; 
    } 

    public void doSomething() { 
    // Do something with cookie, because it should have been set by parent class 
    } 
} 

public class Sub2 extends Parent { 
    @resource public String baseURL; 

    @PostConstruct 
    public void init() { 
    // set parents with my baseURL; 
    BASE_URL = baseURL; 
    } 

    public void doSomethingElse() { 
    // Do something with cookie, because it should have been set by parent class 
    } 
} 
+0

Sub 1과 Sub2는 쿠키에만 액세스 할 수 있도록 Parent를 확장합니까? 아니면 다른 기능을 도출합니까? – jeff

+0

그것은 다른 많은 기능도 상속받습니다. 단지 Sub1이나 Sub2가 아니지만, Sub1과 같이 100+를 좋아하고, 사촌은 테스트 컬렉션입니다. – Churk

+0

쿠키 이외의 Sub1, Sub2 등의 다른 상태가 유지됩니까? – jeff

답변

0
  1. 새로운 테스트 케이스에 스프링 reinits 당신이 단지를 재사용 할 수 있다면 있도록 파일로 쿠키를 직렬화 쿠키 공장 콩
  2. 을 확인 : 여기

    내 코드의 개요입니다 쿠키.

쿠키 데이터를 파일 (각 자격 증명마다 하나씩)로 serialize합니다.

파일이 너무 오래된 경우 다시 존재하지 않습니다.

파일을 빌드 출력 디렉토리에 저장하십시오.

public class CookieMonster implements InitializingBean { 
    private Map<String,CookieAndUrl> cookies = new ConcurrentHashMap<String,CookieAndUrl>(); 

    public CookieAndCurl getCookie(String username) { 
     CookieAndUrl c = cookies.get(username); 
     if (c == null) { 
      c = b;// reauthenicate or get from file 
     } 
    } 
    public static CookieAndUrl { 
     private Cookie cookie; 
     private String baseUrl; 
     //getters and setters 
    } 
} 



public class Parent implements InitializingBean { 
    @Autowired 
    private CookieMonster cookieMonster; 
    private CookieAndUrl cu; 
    public void afterPropertiesSet() { 
     //maybe load which cookie you need here 
     cu = cookieMonster.getCookie("tim"); 
    } 
} 
관련 문제