美文网首页SpringFramework
@SessionAttributes 清除Session

@SessionAttributes 清除Session

作者: dierrenjian | 来源:发表于2017-07-27 15:12 被阅读52次

spring提供注解@SessionAttributes将Model中的数据同步到HttpSession中。在清除Session中的数据时不能调用HttpSession中的removeAttribute("attributeName")方法,需要调用接口SessionStatus中的setComplete方法。接口SessionStatus的唯一实现是类SimpleSessionStatus,调用setComplete方法将boolean类型的属性complete设置为true。

public class SimpleSessionStatus implements SessionStatus {

private boolean complete = false;

@Override

public void setComplete() {

this.complete = true;

}

@Override

public boolean isComplete() {

return this.complete;

}

}

该类还有一个方法是isComplete将会在ModelFactory中的updateModel方法中调用,updateModel方法用于将@SessionAttributes中列出的model attributes推广到session中。

public void updateModel(NativeWebRequest request, ModelAndViewContainer container) throws Exception {

ModelMap defaultModel = container.getDefaultModel();

if (container.getSessionStatus().isComplete()){

this.sessionAttributesHandler.cleanupAttributes(request);

}

else {

this.sessionAttributesHandler.storeAttributes(request, defaultModel);

}

if (!container.isRequestHandled() && container.getModel() == defaultModel) {

updateBindingResult(request, defaultModel);

}

}

由于之前我们调用了setComplete方法,所以方法会进入if分支调用SessionAttributesHandler的cleanupAttributes方法。该方法用于从session中移除已知的属性

相关文章

网友评论

    本文标题:@SessionAttributes 清除Session

    本文链接:https://www.haomeiwen.com/subject/rnvzkxtx.html