`

关于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都能在这里列出来,否则,就有后门啊,要小心

分享到:
评论

相关推荐

    Spring Security in Action

    在 Spring Security 中,身份验证是通过 AuthenticationManager 和 AuthenticationProvider 实现的。AuthenticationManager 负责管理身份验证过程,而 AuthenticationProvider 负责执行具体的身份验证逻辑。 在 ...

    spring spring security2.5 jar

    在整合Spring Security 2.5与Spring 2.5时,需要注意以下几点: 1. **依赖管理**:确保Spring Security的jar包与Spring Framework的版本兼容。在项目中正确引入这些jar包,通常通过Maven或Gradle的依赖管理来实现。...

    精彩:Spring Security 演讲PPT

    在实际开发过程中,使用Spring Security时需要注意以下几点: - **安全性考虑**: 在设计安全策略时,不仅要考虑防止未授权的访问,还要注意防范常见的Web安全攻击,如SQL注入、XSS攻击等。 - **性能优化**: 对于大型...

    SpringSecurity素材.rar

    2. **配置SpringSecurity**:讲解如何在SpringBoot项目中引入SpringSecurity依赖,并配置相应的安全配置类。这通常涉及到定义自定义的`HttpSecurity`配置,比如设置登录页面、未授权页面、CSRF防护等。 3. **用户...

    spring security权限控制

    通过分析"springsecuritydemo4"项目,我们可以学习到如何在实际应用中设置和配置Spring Security,以及如何处理各种权限控制场景。这有助于我们创建一个安全、健壮的Web应用程序。在实践中,不断调试和调整Spring ...

    SpringMVC集成SpringSecurity

    在“SpringMVC 集成 SpringSecurity”的实践中,我们需要理解以下几个关键知识点: 1. **SpringSecurity架构**:SpringSecurity的核心架构由多个组件构成,包括过滤器链、认证管理、权限控制等。其中,过滤器链是...

    springsecurity使用项目

    这个"springsecurity使用项目"是基于Spring Security 构建的一个实例,旨在帮助开发者理解如何在实际应用中实施权限校验。 首先,让我们从核心概念开始。Spring Security 主要由以下几个组件构成: 1. **过滤器链*...

    SpringCloud微服务项目:nacos+springsecurity+gateway+令牌桶限流

    在现代企业级应用开发中,微服务架构已经成为主流选择,Spring Cloud作为Java领域的微服务解决方案,提供了丰富的组件来构建和管理分布式系统。本项目聚焦于SpringCloud微服务框架的几个核心组件,包括Nacos、Spring...

    Spring Security3.1实例

    在"Spring Security3.1实例"中,我们主要关注以下几个核心知识点: 1. **认证**:Spring Security 提供了多种认证机制,如基于内存的、基于数据库的用户信息存储。在这个实例中,用户信息和角色信息存储在数据库中...

    springSecurity demo 下载可用

    在"springSecurity demo 下载可用"的描述中,我们可以推测这是一个示例项目,用于展示如何在SSM(Spring、SpringMVC、MyBatis)框架下整合Spring Security。 SSM框架是Java Web开发中常用的组合,其中Spring负责...

    单点登录实现 Spring_security+CAS

    在实现Spring Security与CAS的集成过程中,主要涉及以下几个关键知识点: 1. **Spring Security基本概念**:理解Spring Security的核心组件,如Filter Chain、Authentication Provider、Access Decision Manager等...

    使用SpringSecurity3用户验证几点体会(异常信息,验证码)

    在本文中,我们将深入探讨如何在Spring Security 3框架中实现用户验证,特别是涉及异常处理和验证码功能。Spring Security是一个强大的安全框架,用于保护Java应用,包括Web应用。以下是对标题和描述中提及知识点的...

    spring-security-helloworld

    在这个项目中,开发者可能会学到以下几个核心知识点: 1. **Spring Security基础**:理解安全上下文、权限模型、身份验证和授权的基本概念。 2. **配置安全规则**:通过`WebSecurityConfigurerAdapter`子类化,...

    Spring security4.1 中文版参考手册 PDF版

    在Spring Security 4.1版本中,有以下几个关键知识点: 1. **身份验证(Authentication)**:Spring Security提供了一套完整的身份验证机制,包括基于内存、数据库、ldap等多种方式的用户认证。手册会详细介绍如何...

    Spring Security 3 源码分析文档

    通过阅读《Spring Security3.pdf》和《spring security3 源码分析.pdf》这两份文档,你可以对Spring Security 3的内部工作机制有更深入的理解,从而更好地在项目中运用这个强大的安全框架。同时,这也会帮助你在面临...

    SpringSecurity官网修改例子 tutorial

    在SpringSecurity中,主要涉及以下几个关键知识点: 1. **访问控制**:SpringSecurity提供了基于角色的访问控制(RBAC),允许开发者定义用户角色和权限,以决定哪些用户可以访问哪些资源。在示例中,你可以看到...

    利用spring security控制同一个用户只能一次登陆

    标题中的“利用Spring Security控制同一个用户只能一次登录”是指在基于Spring Security的Web应用程序中实现单点登录(Single Sign-On, SSO)的功能,确保同一时间只有一个设备或浏览器会话可以登录同一用户的账户。...

    spring-security简单demo

    下面,我们将深入探讨Spring Security的核心概念和在这个示例中可能涉及到的关键点。 1. **身份验证(Authentication)**:Spring Security 提供了多种方式来处理用户身份验证,如用户名/密码、OAuth2、JWT等。在本...

    spring-security-2.0.3

    在Spring Security 2.0.3中,我们可能会找到以下几个关键知识点: 1. **身份验证机制**:Spring Security支持多种身份验证方式,如基于密码的认证、LDAP(轻量级目录访问协议)、JaAS(Java Authentication and ...

Global site tag (gtag.js) - Google Analytics