spring复习:(25)AttributeAccessor接口和AttributeAccessorSupport实现类

public interface AttributeAccessor {
	void setAttribute(String name, @Nullable Object value);
	Object getAttribute(String name);
	Object removeAttribute(String name);
	boolean hasAttribute(String name);
	String[] attributeNames();

}
public abstract class AttributeAccessorSupport implements AttributeAccessor, Serializable {

	/** Map with String keys and Object values. */
	private final Map<String, Object> attributes = new LinkedHashMap<>();


	@Override
	public void setAttribute(String name, @Nullable Object value) {
		Assert.notNull(name, "Name must not be null");
		if (value != null) {
			this.attributes.put(name, value);
		}
		else {
			removeAttribute(name);
		}
	}

	@Override
	@Nullable
	public Object getAttribute(String name) {
		Assert.notNull(name, "Name must not be null");
		return this.attributes.get(name);
	}

	@Override
	@Nullable
	public Object removeAttribute(String name) {
		Assert.notNull(name, "Name must not be null");
		return this.attributes.remove(name);
	}

	@Override
	public boolean hasAttribute(String name) {
		Assert.notNull(name, "Name must not be null");
		return this.attributes.containsKey(name);
	}

	@Override
	public String[] attributeNames() {
		return StringUtils.toStringArray(this.attributes.keySet());
	}


	/**
	 * Copy the attributes from the supplied AttributeAccessor to this accessor.
	 * @param source the AttributeAccessor to copy from
	 */
	protected void copyAttributesFrom(AttributeAccessor source) {
		Assert.notNull(source, "Source must not be null");
		String[] attributeNames = source.attributeNames();
		for (String attributeName : attributeNames) {
			setAttribute(attributeName, source.getAttribute(attributeName));
		}
	}


	@Override
	public boolean equals(@Nullable Object other) {
		return (this == other || (other instanceof AttributeAccessorSupport &&
				this.attributes.equals(((AttributeAccessorSupport) other).attributes)));
	}

	@Override
	public int hashCode() {
		return this.attributes.hashCode();
	}

}

用LinkedHashMap来保存一组Attribute

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security是一个用于身份验证和授权的框架,它提供了一系列的接口实现安全功能。下面是Spring Security内部接口和各个的继承逻辑关系的介绍: 1. UserDetails接口:UserDetails接口Spring Security中用于表示用户详细信息的接口,它包含了一些用于获取用户信息的方法,如getUsername()、getPassword()等。UserDetails接口实现通常是自定义的用户信息。 2. UserDetailsService接口:UserDetailsService接口Spring Security中用于加载用户详细信息的接口,它包含了一个方法loadUserByUsername(),用于根据用户名加载用户详细信息。UserDetailsService接口实现通常是自定义的用户信息加载。 3. Authentication接口:Authentication接口Spring Security中用于表示用户认证信息的接口,它包含了一些用于获取认证信息的方法,如getPrincipal()、getAuthorities()等。Authentication接口实现通常是AuthenticationManager返回的认证结果。 4. AuthenticationManager接口:AuthenticationManager接口Spring Security中用于进行用户认证的接口,它包含了一个方法authenticate(),用于对用户进行认证。AuthenticationManager接口实现通常是自定义的认证管理。 5. AuthenticationProvider接口:AuthenticationProvider接口Spring Security中用于进行用户认证的接口,它包含了一个方法authenticate(),用于对用户进行认证。AuthenticationProvider接口实现通常是自定义的认证提供者。 6. DaoAuthenticationProvider:DaoAuthenticationProviderSpring Security中提供的一个实现了AuthenticationProvider接口的认证提供者,它使用UserDetailsService来加载用户详细信息,并进行密码验证。 7. UserDetailsManager接口:UserDetailsManager接口Spring Security中用于管理用户详细信息的接口,它包含了一些用于管理用户信息的方法,如createUser()、updateUser()等。UserDetailsManager接口实现通常是自定义的用户信息管理。 8. InMemoryUserDetailsManager:InMemoryUserDetailsManagerSpring Security中提供的一个实现了UserDetailsManager接口的用户信息管理,它将用户信息存储在内存中。 9. JdbcUserDetailsManager:JdbcUserDetailsManagerSpring Security中提供的一个实现了UserDetailsManager接口的用户信息管理,它将用户信息存储在数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值