关于Spring Security 在项目中应用的几点建议

Spring Security 2.0 简称SS2(和国内很出名的SpringSide的简写一样啊)
也就是以前的ACEGI,功能很好,很强大,但是我觉得也不能在项目中烂用,
并且,要灵活采取一些措施来有效减少性能损失。
通过从它的工作原理来分析,使用了SS2(acegi),那么你的每个链接都将处于
它的监控之下,对于每一个访问的请求,它都要锲而不舍的去检查一下,是不是
符合我们的要求,一般来说,首先要看看你是不是系统的用户,嗯嗯,转一圈,
然后看看你有没有权限,最简单的又是一圈下来,时间就这样被占用了去,如果
你有多个投票者,那么都要多转几圈。当然单单对单用户或少量的用户的系统来说
没有问题,如过用户多了,你在用上一些花样比如AJAX,甚至对一些资源比如js/img/css等
也进行权限控制的话,那么所有的这些东西,如果不去缓存,统统需要访问Server得到,
呵呵,一个页面可能要进行好多次的验证才能过啊,对用户的一个点击来说,可能只是
不到一秒的时间,可是如果并行的用户多,服务器。。。有点玄。

所以:
1:尽量减少权限认证的内容,比如能用一个投票者的就尽量不用多个。
2:对一些不涉及敏感数据的资源,不要去验证,比如js/css/img等。
3:尽量减少一个页面中的资源请求,比如页面中使用尽量少的引用(js/css/img/jsp/html等)
4:尽量不要把资源(URL)定义的过细,通过对URL权限检查代码的分析,给定一个URL,
     它是去循环整个URL-Role列表去比对的,如果你定义的URL-ROLE越多,呵呵,时间上也越多。
     比较好的方法就是,能用目录角色来限定的,就决不再定义目录下的资源得角色,
     尽量减少URL-ROLE列表的数量,提高命中率。
5:虽然SS2也提供了方法级的控制,个人认为,能用系统结构上的差分解决的就决不要进行方法级的控制,
   否则,性能会降得更多。
当然:
    如果你要做的系统硬件足够强大,以至于不再考虑性能问题,而专注于权限问题,上面的几点大可不必太在意。
最后又想到了一点,如果你的系统很大,我的意思是有N多的模块和页面,那么,你就要有足够的心理准备去做URL-ROLE-USER的配置工作了,如果用户结构也比较复杂,数量也比较多,还要加上Group等,在这里我就要祝你好运了。

补充:
6:
有网友说可以减少上面第2/3所说的URL,在网上查了一下,可以在web.xml中配置过滤器时把一些不必要的URL给过滤掉从而提高性能,
仍以Struts2为例如下:
原来的配置   

<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
    </filter-mapping>


修改后:

<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>


当然,这样一来,必须要保证所有需要进行权限验证的URL都能在这里列出来,否则,就有后门啊,要小心

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Security 单点登录是一种安全认证机制,它允许用户在多个应用程序之间使用同一组凭据进行登录。这种机制可以提高用户体验和安全性,减少用户需要记住的密码数量,同时也可以方便管理员对用户进行管理和授权。Spring Security 单点登录可以通过集成不同的认证协议和技术来实现,如OAuth、SAML、CAS等。 ### 回答2: 单点登录(Single Sign-On,SSO)是指用户只需要在一个应用程序登录一次,就可以在其他应用程序得到授权访问的一种身份认证技术。在实际应用,单点登录技术很常见,而Spring Security是一个开放源代码的安全框架,可以帮助我们实现单点登录。 Spring Security提供了一套基于过滤器(Filter)链的细粒度安全控制,也支持多种认证形式,如基本认证、表单认证及OpenID等。要实现单点登录,我们需要使用Spring Security SSO来保护我们的应用程序。Spring Security SSO通过Cookie和Token等机制实现了用户的登录信息在系统间的传递。 首先,用户在第一个应用程序登录后,Spring Security SSO会创建一个认证信息,包含了用户信息及授权信息,并将该认证信息存储在Cookie或Token。然后,用户转到其他应用程序时,Spring Security SSO会解析Cookie或Token的认证信息,将用户的信息和授权信息传递给每个应用程序,从而实现单点登录。 另外,Spring Security SSO还支持集群环境下的单点登录,可以保证在多个节点实现共享认证信息。例如,如果一个节点在Cookie找不到认证信息,则可以向其他节点请求认证信息,以完成用户的认证。 总之,Spring Security SSO提供了一个可靠、安全和易于使用的方法来实现单点登录,并可以轻松地应用于任何Spring应用程序。 ### 回答3: Spring Security是一个基于Spring的可扩展性框架,它可以为Spring应用程序提供安全性,包括身份验证、授权、保护等。Spring Security也支持单点登录(SSO),因此在多个应用程序之间共享身份验证信息和凭据。 单点登录是一种认证机制,允许用户使用一组凭据(例如用户名和密码)访问多个应用程序,而不需要在每个应用程序都重新输入凭据。用户只需要登录一次,在单点登录的身份验证信息应用于所有相关应用程序,从而提供了更好的用户体验和安全性。 Spring Security实现单点登录需要借助于一个央授权服务器和多个客户端应用程序。央授权服务器可以使用OAuth2协议来验证用户身份,并向客户端应用程序颁发令牌。客户端应用程序可以通过检查令牌来验证用户身份,从而实现单点登录。为了保持安全性,令牌具有失效时间并且可以刷新。 在使用Spring Security实现单点登录时,可以使用各种存储介质来存储用户凭据和令牌,例如数据库、文件系统、内存等。可以根据具体的需求和实现来选择适当的存储介质。 在实现单点登录时,需要考虑以下几个方面: 1. 客户端应用程序需要与授权服务器进行通信,以获取访问令牌。这需要通过OAuth2协议来完成。 2. 令牌需要在客户端应用程序之间共享。使用分布式缓存或基于HTTP的会话共享等技术可以实现。 3. 记住我功能是单点登录的一个重要方面,可以协助用户在一段时间内保持登录状态。该功能需要定期更新令牌并保持令牌的有效时间。 总之,Spring Security提供了一种扩展性强大的框架来实现单点登录,可以帮助开发人员在应用程序之间共享身份验证信息和凭据。使用Spring Security可以提高应用程序的安全性和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值