Os webscripts ao ar livre ainda podem ser chamados após o tempo limite da sessão?
-
12-12-2019 - |
Pergunta
O que estou fazendo é definir ao ar livre e compartilhar o tempo limite da sessão de 60 minutos em seu arquivo web.xml.
Meu cenário é
- Quando eu quiser iniciar um fluxo de trabalho na página Iniciar o fluxo de trabalho, preencho todos os dados necessários, mas não clique no botão "Iniciar o fluxo de trabalho".
- Após o tempo limite da sessão, clico no botão "Iniciar fluxo de trabalho".
- Na primeira vez, a caixa de autenticação é aberta e solicita o nome de usuário e a senha.
- Preenchi o nome de usuário e a senha de outro usuário.
- Ele inicia um fluxo de trabalho com outro usuário autenticado.
- Outras vezes, para o tempo limite da sessão, ele não solicita caixa de autenticação, mas atua para o usuário autenticado solicitado anteriormente.
Então eu acho Por que isso acontece???É por causa do biscoito??
Atualmente são utilizados quatro cookies, nomeadamente alfLogin, alfUsername2, JSSESSIONID, _alfTest.Somente quando o usuário está desconectado, o cookie alfUsername2 é excluído e outros permanecem. O tempo de expiração dos cookies alfLogin e alfUsername2 é de 7 dias e outros cookies dependem da sessão.
O script da web ao ar livre ainda pode ser usado após o tempo limite da sessão? Se sim, como posso evitar essa condição?
Solução
Embora eu tenha que responder minha própria pergunta, só quero compartilhar meu resultado.Eu tenho que rastrear muito.Mas a resposta é tão simples.
Em primeiro lugar, não é por causa do cookie.
Esta resposta não serve apenas para clicar no botão "Iniciar fluxo de trabalho", mas também chamando o webscript ao ar livre após o tempo limite da sessão no compartilhamento.
Todas as chamadas para webscript ao ar livre são feitas por EndPointProxyController
especificamente org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController
em spring-webscripts-1.0.0-sources.jar
.
Em handleRequestInternal
se não houver sessão e basicHttpAuthChallenge for verdadeiro, a caixa de autenticação básica é mostrada abaixo.
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
}
Podemos evitar esta condição como
em
endpointController
de slingshot-application-context.xml, mudar basicHttpAuthChallenge para falso.
Como
<!-- 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>