您可以在Spring XML配置文件中指定您选择的授权提供者。 您可以通过配置Spring的http://www.springframework.org/schema/security/spring-security-3.1.xsd模式中定义的authentication-manager来实现。 简化的authentication-manager元素定义看起来像这样:

<xs:element name='authentication-manager'><xs:complexType><xs:choice minOccurs='0' maxOccurs='unbounded'><xs:element name='authentication-provider'><xs:complexType><xs:choice minOccurs='0' maxOccurs='unbounded'><xs:element ref='security:any-user-service'/><xs:element name='password-encoder'>...</xs:element></xs:choice><xs:attributeGroup ref='security:ap.attlist'/></xs:complexType></xs:element><!-- This is BIG --><xs:element name='ldap-authentication-provider'>...</xs:element></xs:choice><xs:attributeGroup ref='security:authman.attlist'/></xs:complexType>
</xs:element>

这意味着,例如,您可以使用任何数量的身份验证提供程序,包括基本身份验证和JDBC身份验证,如下面的代码段所示:

<authentication-manager alias='authenticationManager'><authentication-provider><user-service><user authorities='ROLE_GUEST' name='guest' password=''/></user-service></authentication-provider><authentication-provider><jdbc-user-service data-source-ref='dataSource'/></authentication-provider></authentication-manager>

您可以使用intercept-url元素将URL链接到用户角色,从而在Spring XML文件中配置授权规则。 intercept-url元素是http元素的子元素,其简短定义如下所示:

<xs:element name='http'><xs:complexType><xs:choice minOccurs='0' maxOccurs='unbounded'><xs:element name='intercept-url'><xs:complexType><xs:attributeGroup ref='security:intercept-url.attlist'/></xs:complexType></xs:element><!-- Details omitted for clarity --><xs:element name='access-denied-handler'>...</xs:element><xs:element name='form-login'>...</xs:element><xs:element name='openid-login'>...</xs:element><xs:element name='x509'>...</xs:element><xs:element ref='security:jee'/><xs:element name='http-basic'>...</xs:element><xs:element name='logout'>...</xs:element><xs:element name='session-management'>...</xs:element><xs:element name='remember-me'>...</xs:element><xs:element name='anonymous'>...</xs:element><xs:element name='port-mappings'>...</xs:element><xs:element ref='security:custom-filter'/><xs:element ref='security:request-cache'/><xs:element name='expression-handler'>...</xs:element></xs:choice><xs:attributeGroup ref='security:http.attlist'/></xs:complexType>
</xs:element>

用法示例:

<security:http><security:intercept-url pattern='/admin/**' access='hasRole('ROLE_ADMIN')'/><security:intercept-url pattern='/account/**' access='hasRole('ROLE_USER')' /><security:intercept-url pattern='/**' access='hasRole('ROLE_ANONYMOUS')' /><!-- other elements removed for clarity -->
</security:http>

您可以使用几个实现Spring的org.springframework.security.authentication.encoding.PasswordEncoder接口的类对密码进行编码和验证。 这只有两种方法: encodePasswordisPasswordValid 。 它的许多实现包括:

  • BaseDigestPasswordEncoder
  • BasePasswordEncoder
  • LdapShaPasswordEncoder
  • Md4PasswordEncoder,
  • Md5PasswordEncoder
  • MessageDigestPasswordEncoder
  • MessageDigestPasswordEncoder
  • PlaintextPasswordEncoder
  • ShaPasswordEncoder

四个

您可以使用Spring Security的标签库来限制对页面元素的访问。 要使用此库,您需要在JSP中包含以下taglib定义:

<%@ taglib prefix='sec' uri='http://www.springframework.org/security/tags' %>

taglib包含三个有用的标签:

  • 授权
  • 认证方式
  • 访问控制表

有用的似乎是authorize标记,以Spring文档中的示例为例,可以以两种方式使用它。 首先,您可以授权角色:

<sec:authorize access='hasRole('supervisor')'>
This content will only be visible to users who have
the 'supervisor' authority in their list of <tt>GrantedAuthority</tt>s.
</sec:authorize>

…其次,您可以针对网址进行授权

<sec:authorize url='/admin'>
This content will only be visible to users who are authorized to send requests to the '/admin' URL.
</sec:authorize>

指定的URL必须与第2项中所述的intercept-url标记配合使用。

您可以使用Spring的内部注释执行方法级别的授权

  • @PreAuthorize('spEL expression')
  • @PostAuthorize('spEL expression')
  • @Secure

spEL表达式可以是任何东西,但通常类似于: hasRole('ROLE_USER')

要启用@PreAuthorize(...)@PostAuthorize(...)请将以下内容添加到XML配置文件中:

<global-method-security pre-post-annotations='enabled' />

如以下示例所示,使用@PreAuthorize(...)

<span class='java0'><br /></span><span class='java16'>@PreAuthorize</span><span class='java8'>(</span><span class='java5'>'hasRole('ROLE_ADMIN')'</span><span class='java8'>) <br /></span><span class='java4'>public </span><span class='java9'>void </span><span class='java10'>deleteUser</span><span class='java8'>(</span><span class='java10'>String username</span><span class='java8'>)</span><span class='java10'>;<br />
</span>

要启用@Secure请将以下内容添加到您的Spring配置文件中:

<global-method-security pre-post-annotations='enabled' />

您可以通过将以下内容添加到Spring配置文件中,使用Spring的JSR-250实现来执行方法级安全性:

<global-method-security jsr250-annotations=”enabled”/>

的JSR-250安全注解是一个子集的JSR-250注解和包括:

  • @RolesAllowed({“ROLE_USER”,”ROLE_ADMIN”})
  • @PermitAll
  • @DenyAll

使用时,JSR-250注释看起来像这样:

@RolesAllowed({"ROLE_ADMIN","ROLE_USER"})
public void deleteUser(String username);

您可以通过几个简单的步骤将Spring Security与OpenID身份验证集成。 其中的第一步是编写一个简单的JSP表单,其中将操作值设置为j_spring_openid_security_check ,该表单的最小值看起来像这样:

<form action='j_spring-openid-security-check' method='post'><label for='openid_idenifier'>Login</label>: <input id='openid_identifier' name='openid_identifier' type='text'/><input type='submit' value='Login' />
</form>

下一步是将openid-login元素添加到http

<xs:element name='http'><xs:complexType><xs:choice minOccurs='0' maxOccurs='unbounded'><xs:element name='openid-login'><xs:annotation><xs:documentation>Sets up form login for authentication with anOpen ID identity</xs:documentation></xs:annotation><xs:complexType><xs:sequence><xs:element minOccurs='0' maxOccurs='unbounded'ref='security:attribute-exchange' /></xs:sequence><xs:attributeGroup ref='security:form-login.attlist' /><xs:attribute name='user-service-ref' type='xs:token'><xs:annotation><xs:documentation>A reference to a user-service (orUserDetailsService bean) Id</xs:documentation></xs:annotation></xs:attribute></xs:complexType></xs:element><!-- Other elements omitted for clarity --></xs:choice></xs:complexType>
</xs:element>

由于所有openid-login子元素都是可选的,因此启用OpenID的最简单方法是编写:

<http auto-config='true'><openid-login/><!-- other tags and attributes omitted for clarity -->
</http>

最后,您需要将spring-security-openid.jar到您的项目中。

您可以将应用程序配置为使用XML配置通过嵌入式LDAP(轻型目录访问协议)服务器对用户进行身份验证。 下面显示的简化XML模式对此进行了描述:

<xs:element name='ldap-server'><xs:complexType><xs:attributeGroup ref='security:ldap-server.attlist' /></xs:complexType>
</xs:element>
<xs:attributeGroup name='ldap-server.attlist'><xs:attribute name='id' type='xs:token'><xs:annotation><xs:documentation>A bean identifier, used for referring to the bean elsewhere in the context.</xs:documentation></xs:annotation></xs:attribute><xs:attribute name='port' type='xs:positiveInteger'/><xs:attribute name='ldif' type='xs:string'><xs:annotation><xs:documentation>Explicitly specifies an ldif file resource to loadinto an embedded LDAPserver. The default is classpath*:*.ldiff</xs:documentation></xs:annotation></xs:attribute><xs:attribute name='root' type='xs:string'><xs:annotation><xs:documentation>Optional root suffix for the embedded LDAP server. Default is'dc=springframework,dc=org'</xs:documentation></xs:annotation></xs:attribute>
</xs:attributeGroup>

LDIF文件 (LDIF代表LDAP交换格式)是一种纯文本文件格式,用于描述一组LDAP记录。

ldap-server元素用法的一个示例是:

<ldap-server ldif='classpath:my-ldif-file.ldif' id='localserver' />

要使用Spring Security LDAP集成,请记住在项目的POM.XML中包含spring-security-ldap.jar jar。

您可以将应用程序配置为使用XML配置通过远程LDAP(轻型目录访问协议)服务器对用户进行身份验证。 下面显示的简化XML模式对此进行了描述:

<xs:element name='ldap-server'><xs:complexType><xs:attributeGroup ref='security:ldap-server.attlist' /></xs:complexType>
</xs:element>
<xs:attributeGroup name='ldap-server.attlist'><xs:attribute name='id' type='xs:token'><xs:annotation><xs:documentation>A bean identifier, used for referring to the bean elsewhere in the context.</xs:documentation></xs:annotation></xs:attribute><xs:attribute name='url' type='xs:token'/><xs:attribute name='port' type='xs:positiveInteger'/><xs:attribute name='manager-dn' type='xs:string'><xs:annotation><xs:documentation>Username (DN) of the 'manager' user identity which will be used toauthenticate to a (non-embedded) LDAP server. If omitted, anonymousaccess will be used.</xs:documentation></xs:annotation></xs:attribute><xs:attribute name='manager-password' type='xs:string'><xs:annotation><xs:documentation>The password for the manager DN. This is requiredif the manager-dn is specified.</xs:documentation></xs:annotation></xs:attribute>
</xs:attributeGroup>

文档指出ldap-server元素“定义LDAP服务器位置或启动嵌入式服务器。 URL指示远程服务器的位置。 如果未提供url,则将启动嵌入式服务器,监听提供的端口号。 该端口是可选的,默认为33389。将使用提供的ID为服务器注册Spring LDAP ContextSource bean。

这是一个非常简单的配置示例:

<ldap-server url='ldap://myServer/dc=captaindebug,dc=com:389' id='ldapExternal' manager-dn='uid=admin,ou=users,ou=systems' manager-password='s3cret'/>

配置服务器后,还需要配置LDAP身份验证提供程序。 似乎有几种方法可以做到这一点,但它并不是那么简单,所以以后可能会更多……

您可以添加
Spring Security Config的<intercept-url />元素requires-channel='https'属性强制所有匹配的URL使用HTTPS。 例如,如果要确保在发送密码之前始终对密码进行加密,则可以将此简化的XML添加到配置中:

<http auto-config='true' use-expressions='true'><intercept-url pattern='/login' requires-channel='https'/><!-- Other attributes and elements omitted -->
</https>

这里还有另外几件事要做,但稍后会做更多……

您可能已经注意到,我已经使用Spring Security XML模式文件( http://www.springframework.org/schema/security/spring-security-3.1.xsd )来解释清单中的某些功能。可以使用Spring Security。 这是因为我一直将Spring XSD视为Spring所有事物的确定参考点。 2011年11月,我在Spring的JSR-250的@PostConstruct Annotation上写了一个博客,其中包含一个错误(是的,的确确实发生了),Spring的Chris Beams – @CBeams正确地指出了这一点,他在JavaLobby上发表了评论。此博客的版本 。 我决定检查架构,发现我们俩都错了(尽管我比克里斯错了很多)–就我所知,《 机长调试 》一书现在是正确的。

应用程序安全性是一个相当复杂的主题,如果您要深入研究它,那么我建议您获得Peter Mularien的Spring Security 3的副本- Spring的Guys也建议您这样做。

最后,如果有一个关于Spring Security的关键想法值得欣赏,那就是,作为应用程序的附加功能,它提供了非常丰富的安全功能集。 因此,您应该尝试让Spring Security尽可能多地处理应用程序的安全细节,而不是深入研究和不必要地编写自己的代码。

参考: Captain Debug's Blog博客上的JCG合作伙伴 Roger Hughes提供的Spring Security可以做的十件事 。

翻译自: https://www.javacodegeeks.com/2012/11/ten-things-you-can-do-with-spring-security.html

Spring Security可以做的十件事相关推荐

  1. 大学里不该做的十件事

    大学里不该做的十件事 永远不要参加任何社团招新,除非它让你作社长.任何社团存在的理由,就是增加社团负责人的竞争资本. 永远不要指望哪个plmm没有男朋友,不排除有mm这么说,这是因为她的男友太多了,她 ...

  2. 身为男人要做的十件事

    1.至少挑战一次自己的极限,并且坚持到成功.不管是考试得第一名,或者游泳游过不曾穿越的河流,或者在讲台上当众演讲,你至少要成为一次主角,至少要让成功证明你一次,这样,在漫长而平淡的一生之中,你都始终相 ...

  3. 管理者每天要做的十件事

    1.开晨会 例会问早.点名.前日盘结 2.看报表 目标管理.结果导向.分析数据 3.查落实 对项目计划.任务跟路检查 4.去现场 现场查看.发现问题.掌握真实情况 5.谈工作 适当组织气氛.提高员工士 ...

  4. 为了开放互联,明道云做了十件事

    本文来自明道云资深研发经理孙伟,在明道云2022年秋季伙伴大会活动演讲,经校对编辑后整理为演讲精华. 一.开放没有选择 很多客户选择我们的一个重要原因,是明道云所能提供的产品开放能力.开放其实是没有选 ...

  5. php能做的事情,成就事业要做的十件事

    成就事业要做的事情,偶尔从网上看到的,觉得有点意思,转载过来与大家共勉. 1.舍得自我投资 市场竞争激烈,要舍得给自己投资,给自己健康.仪表.智力.未来投资,时刻关注市场变化,一旦认定一项投入对自己的 ...

  6. 发表学术论文必须做的十件事(下)

    转载于:https://www.cnblogs.com/yymn/p/4716196.html

  7. 白领是升职还是创业揭秘35岁前要做的10件事

    男人.女人都要过三十五岁这堵墙 三十五岁,是一个具有典型意识色彩的年龄-- 改革开放初,干部年轻化标准,界定在35岁以下. 如今,公务员考试的年龄也限制在35岁. 超过35岁,不孕概念增加三成 ,有了 ...

  8. 女孩做妻子前应知道的十件事

    一段时间的甜蜜恋爱期过后,你和心爱的他终于要踏上期盼已久的红地毯.你发誓一定要做个最幸福的小女人,要成一个永远让丈夫着迷的好妻子.从一个女孩的身份转变为一个妻子的身份前,你一定要知道以下十件事. 一. ...

  9. Ubuntu16.04 装机之后要做的二十件事

    Ubuntu装机之后要做的二十件事 用ubuntu做东西很久了,总结了一些教程,一直想整理一下,确实是没有时间,这下简单的整理了一下,大家可以看看,具体的软件安装包已经推到了本人的百度云帐号下面了,需 ...

最新文章

  1. seaborn可视化水平箱图(Horizontal Boxplot in Python with Seaborn)
  2. 【数据挖掘】高斯混合模型 ( 模型简介 | 软聚类 | 概率作用 | 高斯分布 | 概率密度函数 | 高斯混合模型参数 | 概率密度函数 )
  3. 【作业】组合数据类型练习,英文词频统计实例
  4. 长春理工有计算机专业吗,长春理工大学(专业学位)计算机技术考研难吗
  5. 【机器视觉】 dev_set_draw算子
  6. Android开发中Edittext设置密码显示隐藏的多种方法
  7. IDEA云行项目提示Error: java: OutOfMemoryError
  8. SQL View 的使用语法与原则
  9. CentOS 6.5搭建Redis3.2.8单机分布式集群
  10. 在 Rust 代码中编写 Python 是种怎样的体验?
  11. linux启动找不到,pxe启动的时候找不到pxelinux.0的原因
  12. [HAOI2005] 希望小学
  13. springboot静态集成redis客户端
  14. 如何在powerpoint中设置倒计时
  15. 最新版计算机应用基础,计算机应用基础课件(最新版)
  16. 磁盘、u盘、移动硬盘被写保护了,不能复制文件,解决方案
  17. Kettle/Pentaho的安装与配置
  18. 查看电脑ip地址是否被占用
  19. 硬件加速 | 常用电路设计之PRBS伪随机码发生器的设计
  20. notify()和notifyAll()有什么区别?

热门文章

  1. sql server数据库:创建数据库、建立数据库用户、为用户赋予权限
  2. 三思笔记_使用反射前先三思
  3. docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序
  4. java分布式系统开发_从微服务到分布式系统-Java开发人员生存指南
  5. java流写入数据库_Java 8:在2分钟内将智能流与数据库一起使用
  6. Spring集成基础知识
  7. 注解默认继承_默认方法和多重继承
  8. javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失
  9. jaxb-xjc.jar_使用xjc在一秒钟内生成您的JAXB类
  10. 如何修复无效的目标版本:Maven Build中的1.7、1.8、1.9或1.10错误