1. <bean id="httpSessionContextIntegrationFilter"
class="org.springframework.security.context.HttpSessionContextIntegrationFilter"/>
httpSessionContextIntegrationFilter是集成过滤器的一个实现,在用户的一个请求过程中,用户的
认证信息通过SecurityContextHolder(使用ThreadLoacl实现)进行传递的,所有的过滤器都是通过
SecurityContextHolder来获取用户的认证信息,从而在一次请求中所有过滤器都能共享
Authentication(认证),减少了HttpRequest参数的传送,下面的代码是从安全上下文的获取
Authentication对象的方法:
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
首先我们需要了解Spring Security为我们提供的另外一个重要的组件,
org.springframework.security.userdetails .UserDetails接口,它代表一个应用系统的用户,该接口定
义与用户安全信息相关的方法:
String getUsername():获取用户名;
String getPassword():获取密码;
boolean isAccountNonExpired():用户帐号是否过期;
boolean isAccountNonLocked():用户帐号是否锁定;
boolean isCredentialsNonExpired():用户的凭证是否过期;
boolean isEnabled():用户是否处于激活状态。
当以上任何一个判断用户状态的方法都返回false时,用户凭证就被视为无效。UserDetails接口还
定义了获取用户权限信息的getAuthorities()方法,该方法返回一个GrantedAuthority[]数组对象,
GrantedAuthority是用户权限信息对象,这个对象中定义了一个获取用户权限描述信息的
getAuthority()方法。
这样,我们就可以在系统中获取用户的相关信息了,需要使用到Authentication对象定义的Object
getPrincipal()方法,这个方法返回一个Object类型的对象,通常可以将它转换为UserDetails,从而
可以获取用户名,密码以及权限等信息。代码如下:
UserDetails details = (UserDetails)authentication.getPrincipal();
GrantedAuthority[] authority = details.getAuthorities();
2.这个Bean可以阻止用户在进行了一次成功登录以后在进行一次成功的登录。在 applicationContext
-security.xml配置文件添加sessionController的配置:
<bean id="concurrentSessionController"
class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl"
maximumSessions="1"
exceptionIfMaximumExceeded="true"
sessionRegistry-ref="sessionRegistry"/>
<bean id="sessionRegistry"
class="org.springframework.security.concurrent.SessionRegistryImpl"/>
maximumSessions属性配置了只允许同一个用户登录系统一次,exceptionIfMaximumExceeded属
性配置了在进行第二次登录是是否让第一次登录失效。这里设置为true不允许第二次登录。要让此功
能生效,我们还需要在web.xml文件中添加一个监听器,以让Spring Security能获取Session的生命周
期事件,配置如下:
<listener>
<listener-class>
org.springframework.security.ui.session.HttpSessionEventPublisher
</listener-class>
</listener>