spring security实现单用户登录

建议先看完spring security的基础配置,再看下面的配置流程就会很明白了。

https://blog.csdn.net/u013984781/article/details/79755131    

在完成spring基础配置之后,可以在配置限制单个用户只能一处登录应用程序的功能,Spring Security支持这种开箱即用的功能。

    第一步:使用自定义过滤器,配置ConcurrentSessionFilter,用来判断session是否过期以及更新最新访问时间;

    在配置收到HTTP请求时的安全验证中添加以下配置:

<custom-filter ref="concurrencySessionFilter" position="CONCURRENT_SESSION_FILTER"/>

    并配置相应的<b:bean>

<b:bean id="concurrencySessionFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter">
    <b:constructor-arg name="sessionRegistry" ref="sessionRegistry" />
    <b:constructor-arg name="expiredUrl" value="/login.html" />
</b:bean>

    第二步:注入SessionAuthenticationStrategy到CustomUsernamePasswordAuthenticationFilter中,否则默认使用的是NullAuthenticatedSessionStrategy,则获取不到登录用户数;

<!--自定义实现用户名密码及验证码判断功能的Filter,因为用户认证模块涉及了验证码,所以单独写了一个filter,这里这个类就只起了比对用户密码的功能 -->
<b:bean id="customUsernamePasswordAuthenticationFilter" class="cn.topcheer.common.authority.springsec.CustomUsernamePasswordAuthenticationFilter">
    <b:property name="enableValidateCode" value="false"></b:property>
    <b:property name="authenticationManager" ref="authenticationManager"></b:property>
    <b:property name="authenticationFailureHandler" ref="failureHandler"></b:property>
    <b:property name="authenticationSuccessHandler" ref="successHandler"></b:property>
    <!--注入sessionAuthenticationStrategy-->
    <b:property name="sessionAuthenticationStrategy" ref="sas"/>
</b:bean><b:property name="sessionAuthenticationStrategy" ref="sas"/>
</b:bean>

其中“sas”配置为:

<b:bean id="sas" class="org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy">
	<b:constructor-arg>
	    <b:list>
	        <!-- 并行控制 -->
	        <b:bean class="org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy">
		    <b:constructor-arg ref="sessionRegistry" />
		    <b:property name="maximumSessions" value="1" />
		    <!--控制第二次登录将把第一次登录的用户踢下线-->
		    <b:property name="exceptionIfMaximumExceeded" value="false" />
	        </b:bean>
	        <b:bean class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy" />
		<b:bean class="org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy">
			<b:constructor-arg ref="sessionRegistry" />
	        </b:bean>
	    </b:list>
	</b:constructor-arg>
</b:bean>

“sessionRegistry”配置为:

<b:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />

配置完成后,重跑程序发现功能并没有实现,在调试过程中发现,判断当前用户是否重复时,这里的sessionCount总是0

于是,我点开sessionReistry.getAllSessions方法

发现这里取principle是根据HashMap取值的,hashMap判断相等需要hashCode相同,因此两个相同用户登录的时候需要相同的hashCode。在实现userDetails接口的用户信息中添加以下代码

     /**
     * 当同一用户登录多次时,获取的用户不是同一个用户
     * 所以需要重写hashcode和equals方法
     */
    @Override
    public boolean equals(Object rhs) {
        if (rhs instanceof CustomSecurityUser) {
            return getUsername().equals(((CustomSecurityUser) rhs).getUsername());
        }
        return false;
    }

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Security可以通过多种方式实现点登录,其中最常用的是使用Spring Security SAML扩展来实现。具体步骤如下: 1. 配置Spring Security SAML扩展:在Spring Security配置文件中添加SAML扩展的依赖和配置。 2. 配置身份提供者:在SAML配置文件中配置身份提供者,包括身份提供者的元数据和证书。 3. 配置服务提供者:在SAML配置文件中配置服务提供者,包括服务提供者的元数据和证书。 4. 配置点登录:在SAML配置文件中配置点登录,包括点登录的URL和断言消费服务。 5. 配置用户认证:在SAML配置文件中配置用户认证,包括用户认证的方式和用户信息的获取。 6. 配置点注销:在SAML配置文件中配置点注销,包括点注销的URL和注销请求的处理。 7. 配置安全策略:在SAML配置文件中配置安全策略,包括加密和签名的方式和算法。 通过以上步骤,可以使用Spring Security SAML扩展实现点登录。具体实现过程需要根据具体的应用场景和需求进行调整和优化。 ### 回答2: Spring Security是一个功能强大且灵活的安全性解决方案,可以用于实现点登录(Single Sign-On,简称SSO)。 点登录是指用户只需登录一次,即可在多个相互信任的应用系统中进行访问。Spring Security提供了多种方法来实现点登录。 其中一种常见的实现方式是使用基于令牌(Token)的认证和授权机制。当用户登录成功后,系统会为该用户生成一个唯一的令牌,并将该令牌保存到用户的会话中。当用户访问其他系统时,这些系统会验证用户的令牌是否有效,并根据令牌中的信息进行认证和授权。 Spring Security提供了一套完整的认证和授权机制,可以很方便地实现上述的基于令牌的点登录。在Spring Security中,可以将令牌保存在内存、数据库或者分布式存储中,以实现多个应用系统之间的共享。 另外,Spring Security还支持使用OAuth2协议来实现点登录。OAuth2是一种开放标准的授权协议,可以让用户授权第三方应用访问其在其他应用中的信息,从而实现点登录。Spring Security提供了OAuth2的实现,可以轻松地将其集成到应用中,实现跨系统的认证和授权。 除了上述方法,Spring Security还可以与其他点登录框架(如CAS)进行集成,以实现更复杂的点登录场景。 总之,Spring Security提供了多种方法来实现点登录,开发者可以根据实际需求进行选择和配置。无论是基于令牌的点登录还是使用OAuth2协议,Spring Security都能够提供强大的安全性保障,确保用户的登录信息和资源得到有效的保护。 ### 回答3: Spring Security可以实现点登录(Single Sign-On,简称SSO),即用户只需登录一次就可以访问多个相互信任的系统。 实现SSO的关键是集中式的认证和授权管理。Spring Security提供了多种方式来实现SSO,以下是一种常见的实现方式: 1. 配置认证中心:在一个独立的系统中,配置认证中心,负责用户的登录认证和鉴权。可以使用Spring Security提供的功能来实现认证中心,如使用数据库存储用户信息和权限信息。 2. 配置SSO客户端:在需要使用SSO的系统中,添加SSO客户端配置。通过配置SSO客户端可以将用户登录请求转发到认证中心进行认证。在Spring Security中,可以使用SAML(Security Assertion Markup Language)或者OAuth2等协议来实现SSO。 3. 配置认证中心和SSO客户端的信任关系:在认证中心和SSO客户端之间建立信任关系,使其可以安全地进行认证和授权操作。可以使用数字证书、密钥对等方式来实现信任关系的建立。 4. 配置认证中心和SSO客户端的点登录:通过配置认证中心和SSO客户端的点登录相关的参数,实现用户只需在认证中心登录一次,就可以访问到其他相互信任的系统。用户在访问其他系统时,SSO客户端会将用户的认证信息发送给认证中心进行验证,从而实现点登录。 总结来说,Spring Security可以通过配置认证中心和SSO客户端,并建立信任关系,实现点登录功能。通过这种方式,用户只需登录一次就可以访问多个相互信任的系统,提高了用户体验和系统安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值