`

关于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 Cloud Finchley SR2全套(集成Spring Gateway)

    框架中的MongoDB项目是我用来作为文件服务器的一个实现,很简单实现了上传下载删除和预览的几个接口,大家可以看源码,有朋友问到秒传怎么做 这里只是简单说一个关键词(MD5)原理自行理解吧 Redis延迟消费的项目是...

    JAVA上百实例源码以及开源项目源代码

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    asp.net知识库

    也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息...

    Blockchain-Access-SpringBoot:这是Mongodb的基于微服务的体系结构,借助Spring Boot,它使用Java进行审计,并使用了哈希算法(SHA-256)的概念

    可以考虑以下几点来简化当前版本的项目: •拟议的系统将是基于微服务的区块链概念,我们将沿着使用NoSQL来存储“哈希”信息的方式来实施该概念。 •首先,将使用SHA加密将私有数据转换为安全密钥,然后将其存储...

    单点登录sso-shiro-cas-maven

    其中QueryDatabaseAuthenticationHandler这个类是自定义构建的,在cas/WEB-INF/lib/cas-jdbc-1.0.0.jar里面,有兴趣的同学可以发编译看下,关于几个属性的说明 1. dataSource: 数据源,配置MySQL的连接信息 2. ...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包7

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包9

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包101

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    Java资源包01

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics