美文网首页
Spring mvc之SessionAttributesHand

Spring mvc之SessionAttributesHand

作者: engineer_tang | 来源:发表于2021-04-24 11:54 被阅读0次

    管理通过@SessionAttributes声明的控制器特定会话属性。实际存储被委派给SessionAttributeStore 实例。

    当用@SessionAttributes 注释的控制器将属性添加到模型中时,这些属性将根据@sessionAttribute指定的名称和类型进行检查。匹配的模型属性保存在HTTP会话中,并保留在那里,直到控制器调用SessionStatus

        private final Set<String> attributeNames = new HashSet<>();
    
        private final Set<Class<?>> attributeTypes = new HashSet<>();
    
        private final Set<String> knownAttributeNames = Collections.newSetFromMap(new ConcurrentHashMap<>(4));
    
        private final SessionAttributeStore sessionAttributeStore;
    

    1.1 SessionStatus接口

    可以注入处理程序方法的简单接口,允许它们发出会话处理完成的信号。然后,处理程序调用程序可以跟踪适当的清理,例如在处理程序处理期间隐式创建的会话属性(根据@SessionAttributes注释)。
    实现类SimpleSessionStatus

    1.2 @SessionAttributes注解

    表示特定处理程序使用的会话属性的注释。

    这通常会列出模型属性的名称,这些属性应该透明地存储在会话或一些会话存储中,用作表单备份bean。在类型级别声明,应用于带注释的处理程序类操作的模型属性。

    注意:使用此注释指示的会话属性对应于特定处理程序的模型属性,透明地存储在会话会话中。一旦处理程序指示会话会话会话完成,这些属性将被删除。因此,对于这些会话属性,可以使用此工具,这些属性应该在特定处理程序的会话过程中临时存储在会话中。

    对于永久会话属性,例如用户身份验证对象,使用传统的session.setAttribute 方法。或者,考虑使用泛型的属性管理功能org.springframework.web.context.request.WebRequest 接口。

    注意:当使用控制器接口时(例如用于AOP代理),请确保一致地将所有映射注释(如@RequestMapping和@SessionAttributes)放在控制器接口上,而不是放在实现类上。

    2. SessionAttributeStore接口

    在后端会话中存储模型属性的策略接口。

    接口定义如下:

    public interface SessionAttributeStore {
    
        void storeAttribute(WebRequest request, String attributeName, Object attributeValue);
    
        @Nullable
        Object retrieveAttribute(WebRequest request, String attributeName);
    
        void cleanupAttribute(WebRequest request, String attributeName);
    
    }
    

    2.1 storeAttribute方法

    将提供的属性存储在后端会话中。
    可以为新属性和现有属性调用。在后一种情况下,这表示属性值可能已被修改。

    2.2 retrieveAttribute方法

    从后端会话检索指定的属性。
    调用该方法时,通常期望属性已经存在,如果该方法返回null,则抛出异常。

    2.3 cleanupAttribute方法

    清除后端会话中的指定属性。
    指示属性名称将不再使用。

    2.4 attributeNamePrefix属性

    指定用于后端会话中属性名称的前缀。
    默认设置是不使用前缀,以与模型中相同的名称存储会话属性。

    2.5 实现类DefaultSessionAttributeStore

    SessionAttributeStore接口的默认实现,将属性存储在WebRequest会话(即HttpSession)中。

    3. WebRequest接口

    4. ServletWebRequest类

    相关文章

      网友评论

          本文标题:Spring mvc之SessionAttributesHand

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