快捷搜索:

Spring security 命名空间的使用

1. Introduction 在application context中,你的开始应用security 命名空间,必须在application context文件中添加schema声明。 Java代码

...

...

假如把spring security设置设置设备摆设摆设文件零丁设置设置设备摆设摆设在一个文件,可以把security命名空间设置为默认的,以简化设置设置设备摆设摆设。变动beans tag的 配饰,如下:

引用

2.1.1. Design of the Namespace

Web/HTTP Security

Business Object (Method) Security

AuthenticationManager

AccessDecisionManager

AuthenticationProviders

UserDetailsService

2.2. Getting Started with Security Namespace Configuration 2.2.1. web.xml Configuration 首先在app的web.xml文件中添加下面的过滤器声明: 2.2.2. A MinimalConfiguration 启用web security从一下设置设置设备摆设摆设开始: Java代码

上面的设置设置设备摆设摆设阐明,所有的URLs都被保护了,只有ROLE_USER角色的用户才可以造访 可以设置设置设备摆设摆设多个 来适应多种不合的造访节制,但这些 是有感化顺序的, 排在前面的是优先应用的。 添加一些用户,你能定义一些测试数据在namespace中 Java代码

在上面auto-config设置为true的设置设置设备摆设摆设相称于以下的设置设置设备摆设摆设: Java代码

同时留意:auto-config的设置要求有一个UserDetailsService 在表单认证中,默认会自动供给一个页面给你,你也可以定制自己的登录页面: Java代码

filters="none"表示扫除在拦截链之外。 启用Basic Auth的设置设置设备摆设摆设 Java代码

在上面的设置设置设备摆设摆设中Form login仍旧是可以应用,值是Basic Auth是优先采纳的 2.2.3. Using other Authentication Providers 机动设置设置设备摆设摆设authentication-provider Java代码

假如你应用数据库,还可以这样设置设置设备摆设摆设: Java代码

这样要求你的数据库表要相符必然的要求,你也可以这设置设置设备摆设摆设Spring Security JdbcDaoImpl。 指向user-service-ref。 添加加密设置设置设备摆设摆设: Java代码

你也能定制自己的加密算法,在文件中设置设置设备摆设摆设为一个bean。把bean的name指向password-encoder的ref属性, 不过定制的类要实现PasswordEncoder接口。 2.3. Advanced Web Features 假如你的利用支持HTTP 和 HTTPS,你能要求你特定的URLS仅能经由过程HTTPS造访, 这样的要求可以经由过程的requires-channel属性进行设置获得支持,。 Java代码

...

...

requires-channel有三种值供给设置:http,https和any 假如你应用非标准的HTTP and/or HTTPS端口。可以指定你自己的: Java代码

...

...

节制同一个用户是否可以同时进行多次登录: 在web.xml文件中添加下面的设置设置设备摆设摆设: Java代码

org.springframework.security.ui.session.HttpSessionEventPublisher

org.springframework.security.ui.session.HttpSessionEventPublisher

Java代码

...

...

concurrent-session-control还有一个属性exception-if-maximum-exceeded。假如设置为true,跨越最大年夜max-sessions的设置 今后,是容许登录。而false是可以登录的,同时把光阴最长没有活动的session设置过时。 假如你曩昔应用过Spring Security,你应该知道这个框架里掩护了一个过滤器链,来供给它的办事。 你大概想把你自己的过滤器添加到链条的特定位置,或者让已存在的过滤器,应用特定的版本。 你若何在命名空间设置设置设备摆设摆设里实现这些功能呢?过滤器链现在已经不能之间看到了。 过滤器顺序在应用命名空间的时刻是被严格履行的。 每个Spring Security过滤器都实现了Spring的Ordered接口, 这些过滤器在初始化的时刻先被排好序了。 标准的过滤器在命名空间里都有自己的假名: table 2.1. 标准过滤器又名和顺序 Java代码

Alias FilterClass

CHANNEL_FILTERChannelProcessingFilter

CONCURRENT_SESSION_FILTERConcurrentSessionFilter

SESSION_CONTEXT_INTEGRATION_FILTERHttpSessionContextIntegrationFilter

LOGOUT_FILTERLogoutFilter

X509_FILTERX509PreAuthenticatedProcessigFilter

PRE_AUTH_FILTERSubclass of AstractPreAuthenticatedProcessingFilter

CAS_PROCESSING_FILTERCasProcessingFilter

AUTHENTICATION_PROCESSING_FILTERAuthenticationProcessingFilter

BASIC_PROCESSING_FILTERBasicProcessingFilter

SERVLET_API_SUPPORT_FILTERclassname

REMEMBER_ME_FILTERRememberMeProcessingFilter

ANONYMOUS_FILTERAnonymousProcessingFilter

EXCEPTION_TRANSLATION_FILTERExceptionTranslationFilter

NTLM_FILTERNtlmProcessingFilter

FILTER_SECURITY_INTERCEPTORFilterSecurityInterceptor

SWITCH_USER_FILTERSwitchUserProcessingFilter

Alias FilterClass

CHANNEL_FILTERChannelProcessingFilter

CONCURRENT_SESSION_FILTERConcurrentSessionFilter

SESSION_CONTEXT_INTEGRATION_FILTERHttpSessionContextIntegrationFilter

LOGOUT_FILTERLogoutFilter

X509_FILTERX509PreAuthenticatedProcessigFilter

PRE_AUTH_FILTERSubclass of AstractPreAuthenticatedProcessingFilter

CAS_PROCESSING_FILTERCasProcessingFilter

AUTHENTICATION_PROCESSING_FILTERAuthenticationProcessingFilter

BASIC_PROCESSING_FILTERBasicProcessingFilter

SERVLET_API_SUPPORT_FILTERclassname

REMEMBER_ME_FILTERRememberMeProcessingFilter

ANONYMOUS_FILTERAnonymousProcessingFilter

EXCEPTION_TRANSLATION_FILTERExceptionTranslationFilter

NTLM_FILTERNtlmProcessingFilter

FILTER_SECURITY_INTERCEPTORFilterSecurityInterceptor

SWITCH_USER_FILTERSwitchUserProcessingFilter 你可以把你自己的过滤器添加到行列步队中,应用custom-filter元素,应用这些名字中的一个, 来指定你的过滤器应该呈现的位置: Java代码

你还可以应用after 或 before属性,假如你想把你的过滤器添加到行列步队中另一个过滤器的前面或后面。 可以应用"FIRST" 或 "LAST"来指定你想让你的过滤器分手呈现在行列步队元素的前面或后面。 2.3.6. Session Fixation Attack Protection Session固定进击是一个潜在危险,当一个恶意进击者可以创建一个session造访一个网站的时刻, 然后说服另一个用户登录到同一个会话上(比如,发送给他们一个包孕了session标识参数的链接)。 Spring Security经由过程在用户登录时,创建一个新session来防止这个问题。 假如你不必要保护,或者它与其他一些需求冲突,你可以经由过程应用中的session-fixation-protection属性来设置设置设备摆设摆设它的行径, 它有三个选项 migrateSession - 创建一个新session,把原本session中所有属性复制到新session中。这是默认值。 none - 什么也不做,继承应用原本的session。 newSession - 创建一个新的“干净的”session,不会复制session中的数据。 2.4. Method Security Spring Security 2.0大年夜幅改良了对你的办事层措施添加安然。 假如你应用Java 5或更高版本,还支持JSR-250的安然评释, 同框架供给的@secured评释相似。 你可以为单个bean供给安然节制,经由过程应用intercept-methods元素装饰bean声明, 或者你可以应用AspectJ要领的切点来节制实体办事层里的多个bean。 2.4.1. TheElement 这个元素用来在你的利用法度榜样中启用基于安然的评释(经由过程在这个元素中设置相应的属性), 也可以用来声明将要利用在你的实体application context中的安然切点组。 你应该只定义一个元素。 下面的声明同时启用两种类型的评释: Java代码

protect-pointcut是异常强大年夜的,它让你可以用简单的声明对多个bean的进行安然声明。 参考下面的例子: Java代码

这样会保护application context中的相符前提的bean的所有措施,这些bean要在com.mycompany包下, 类名以"Service"结尾。 ROLE_USER的角色才能调用这些措施。 就像URL匹配一样,指定的匹配要放在切点行列步队的最前面, 第一个匹配的表达式才会被用到 2.4.2. The intercept-methods Bean Decorator

2.5. The Default AccessDecisionManager 这章假设你有一些Spring Security权限节制有关的架构常识。 假如没有,你可以跳过这段,今后再来看, 由于这章只是为了自定义的用户设置的,必要在简单基于角色安然的根基上加一些客户化的器械。 当你应用命名空间设置设置设备摆设摆设时,默认的AccessDecisionManager实例会自动注册,然后用来为措施调用和web URL造访做验证, 这些都是基于你设置的intercept-url和protect-pointcut权限属性内容(和评释中的内容,假如你应用评释节制措施的权限)。 默认的策略是应用一个AffirmativeBased AccessDecisionManager ,以及RoleVoter 和AuthenticatedVoter。 2.5.1. Customizing the AccessDecisionManager 假如你必要应用一个更繁杂的造访节制策略,把它设置给措施和web安然是很简单的。 对付措施安然,你可以设置global-security里的access-decision-manager-ref属性, 用对应 AccessDecisionManager bean在application context里的id:...web安然安然的语法也是一样,然则放在http元素里:...2.5.2. The Authentication Manager 我们大年夜概知道命名空间设置设置设备摆设摆设会自动为我们注册一个验证治理器bean。 这是一个Spring Security的ProviderManager类, 假如你曩昔应用过框架,应该对它很认识了。 你大概想为ProviderManager注册别的的AuthenticationProvider bean, 你可以应用

元素实现。比如: Java代码

...

...

另一个常见的需求是,高低文中的另一个bean可能必要引用AuthenticationManager。 这里有一个特殊的元素,可以让你为AuthenticationManager注册一个又名, 然后你可以application context的其他地方应用这个名字。 Java代码

...

您可能还会对下面的文章感兴趣: