세션 시간이 초과된 후에도 야외 웹스크립트를 계속 호출할 수 있나요?
-
12-12-2019 - |
문제
내가 하고 있는 일은 web.xml 파일에서 야외 및 공유 세션 시간 초과 시간을 60분으로 설정하는 것입니다.
내 시나리오는
- 시작 워크 플로 페이지에서 워크 플로를 시작하려면 필요한 모든 데이터를 채우지 만 "워크 플로트 시작"버튼을 클릭하지 마십시오.
- 세션 시간이 초과되면 이 "워크플로 시작" 버튼을 클릭합니다.
- 처음으로 인증 상자가 열리고 사용자 이름 및 비밀번호를 요청합니다.
- 다른 사용자의 사용자 이름과 비밀번호를 입력했습니다.
- 인증된 다른 사용자로 워크플로를 시작합니다.
- 세션 타임 아웃의 경우 다른 시간에 인증 상자를 요청하지 않지만 이전에 요청 된 인증 된 사용자를 위해 행동합니다.
그래서 나는 생각한다 왜 그런 일이 발생합니까 ???쿠키 때문인가요??
현재 alfLogin, alfUsername2, JSSESSIONID, _alfTest라는 4개의 쿠키가 사용됩니다.사용자가 로그아웃한 경우에만 alfUsername2 쿠키는 삭제되고 다른 쿠키는 남습니다. alfLogin 및 alfUsername2 쿠키의 만료 시간은 7일이며 다른 쿠키는 세션에 따라 다릅니다.
세션 시간이 초과된 후에도 야외 웹 스크립트를 계속 사용할 수 있습니까? 그렇다면 어떻게 하면 이 상태를 피할 수 있습니까?
해결책
내 질문에 답해야 하지만 결과를 공유하고 싶습니다.많이 추적해야 해요.그런데 대답은 너무 간단해요.
첫째, 쿠키 때문이 아닙니다.
이 답변은 "워크플로 시작" 버튼을 클릭하는 것뿐만 아니라 공유 세션 시간 초과 후 야외 웹스크립트 호출.
야외 웹스크립트에 대한 모든 호출은 다음에 의해 수행됩니다. EndPointProxyController
구체적으로 org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController
~에 spring-webscripts-1.0.0-sources.jar
.
~ 안에 handleRequestInternal
세션이 없고 basicHttpAuthChallenge가 true인 경우 기본 인증 상자는 아래와 같습니다.
else if (this.basicHttpAuthChallenge || descriptor.getBasicAuth())
{
// check for HTTP authorisation request (i.e. RSS feeds, direct links etc.)
String authorization = req.getHeader("Authorization");
if (authorization == null || authorization.length() == 0)
{
res.setStatus(HttpServletResponse.SC_UNAUTHORIZED,
"No USER_ID found in session and requested endpoint requires authentication.");
res.setHeader("WWW-Authenticate", "Basic realm=\"Alfresco\"");
// no further processing as authentication is required but not provided
// the browser will now prompt the user for appropriate credentials
return null;
}
else
{
// other coding
}
우리는 다음과 같이 이 조건을 피할 수 있습니다.
~에
endpointController
~의 새총-응용 프로그램-context.xml, 변화 basicHttpAuthChallenge를 false로 설정합니다.
좋다
<!-- Override EndPointProxyController to enable Basic HTTP auth challenge on 401 response -->
<bean id="endpointController" class="org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController">
<property name="cacheSeconds" value="-1" />
<property name="useExpiresHeader"><value>true</value></property>
<property name="useCacheControlHeader"><value>true</value></property>
<property name="configService" ref="web.config" />
<property name="connectorService" ref="connector.service" />
<property name="supportedMethods"><null/></property>
<property name="basicHttpAuthChallenge"><value>false</value></property>
</bean>