Spring Security登录页面

Spring Security登录页面

关于登录 form-login 元素介绍 http 元素下的 form-login 元素是用来定义表单登录信息的。当我们什么属性都不指定的时候 Spring Security 会为我们生成一个默认的登录页面。如果不想使用默认的登录页面,我们可以指定自己的登录页面。 使用自定义登录页面 自定义登录页面是通过 login-page 属性来指定的。提到 login-page 我们不得不提另外几个属性。 username-parameter:表示登录时用户名使用的是哪个参数,默认是 “j_username”。 password-parameter:表示登录时密码使用的是哪个参数,默认是 “j_password”。 login-processing-url:表示登录时提交的地址,默认是 “/j-spring-security-check”。这个只是 Spring Security 用来标记登录页面使用的提交地址,真正关于登录这个请求是不需要用户自己处理的。 所以,我们可以通过如下定义使 Spring Security 在需要用户登录时跳转到我们自定义的登录页面。 <security:http auto-config="true"> <security:form-login login-page="/login.jsp" login-processing-url="/login.do" username-parameter="username" password-parameter="password" /> <!-- 表示匿名用户可以访问 --> <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/> <security:intercept-url pattern="/**" access="ROLE_USER"...
spring security是什么?

spring security是什么?

Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。 Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。 Spring Security 提供了基于javaEE的企业应有个你软件全面的安全服务。这里特别强调支持使用SPring框架构件的项目,Spring框架是企业软件开发javaEE方案的领导者。如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细的看一看。熟悉Spring特别是一来注入原理两帮助你更快更方便的使用Spring Security。 人们使用Spring Secruity的原因有很多,单大部分都发现了javaEE的Servlet规范或EJB规范中的安全功能缺乏典型企业应用场景所需的深度。提到这些规范,重要的是要认识到他们在WAR或EAR级别无法移植。因此如果你更换服务器环境,这里有典型的大量工作去重新配置你的应用程序员安全到新的目标环境。使用Spring Security 解决了这些问题,也为你提供许多其他有用的,可定制的安全功能。 正如你可能知道的两个应用程序的两个主要区域是“认证”和“授权”(或者访问控制)。这两个主要区域是Spring Security 的两个目标。“认证”,是建立一个他声明的主题的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统)。“授权”指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。这个概念是通用的而不只在Spring Security中。 在身份验证层,Spring Security 的支持多种认证模式。这些验证绝大多数都是要么由第三方提供,或由相关的标准组织,如互联网工程任务组开发。另外Spring Security 提供自己的一组认证功能。具体而言,Spring Security 目前支持所有这些技术集成的身份验证: HTTP BASIC 认证头 (基于 IETF RFC-based 标准) HTTP Digest 认证头 ( IETF RFC-based 标准)...
Spring Security 核心类

Spring Security 核心类

核心类简介 Authentication Authentication 是一个接口,用来表示用户认证信息的,在用户登录认证之前相关信息会封装为一个 Authentication 具体实现类的对象,在登录认证成功之后又会生成一个信息更全面,包含用户权限等信息的 Authentication 对象,然后把它保存在 SecurityContextHolder 所持有的 SecurityContext 中,供后续的程序进行调用,如访问权限的鉴定等。 SecurityContextHolder SecurityContextHolder 是用来保存 SecurityContext 的。SecurityContext 中含有当前正在访问系统的用户的详细信息。默认情况下,SecurityContextHolder 将使用 ThreadLocal 来保存 SecurityContext,这也就意味着在处于同一线程中的方法中我们可以从 ThreadLocal 中获取到当前的 SecurityContext。因为线程池的原因,如果我们每次在请求完成后都将 ThreadLocal 进行清除的话,那么我们把 SecurityContext 存放在 ThreadLocal 中还是比较安全的。这些工作 Spring Security 已经自动为我们做了,即在每一次 request 结束后都将清除当前线程的 ThreadLocal。 SecurityContextHolder 中定义了一系列的静态方法,而这些静态方法内部逻辑基本上都是通过 SecurityContextHolder 持有的 SecurityContextHolderStrategy 来实现的,如 getContext()、setContext()、clearContext()等。而默认使用的 strategy 就是基于...
Spring Security Cache UserDetails

Spring Security Cache UserDetails

缓存 UserDetails Spring Security 供给了一个实行了不妨缓存 UserDetails 的 UserDetailsService 实行类,CachingUserDetailsService。该类的结构接受一个用来真实加载 UserDetails 的 UserDetailsService 实行类。当须要加载 UserDetails 时,其开始会从缓存中获得,即使缓存中没有对应的 UserDetails 生存,则运用持有的 UserDetailsService 实行类举行加载,而后将加载后的截止寄存在缓存中。UserDetails 与缓存的交互是经过 UserCache 接口来实行的。CachingUserDetailsService 默许具有 UserCache 的一个空实行援用,NullUserCache。以次是 CachingUserDetailsService 的类设置。 public class CachingUserDetailsService implements UserDetailsService { private UserCache userCache = new NullUserCache(); private final UserDetailsService delegate; CachingUserDetailsService(UserDetailsService delegate) {...
Spring Security AuthenticationProvider.

Spring Security AuthenticationProvider.

AuthenticationProvider 认证是由 AuthenticationManager 来处置的,然而真实举行认证的是 AuthenticationManager 中设置的 AuthenticationProvider。AuthenticationManager 中不妨设置有多个 AuthenticationProvider。当咱们运用 authentication-provider 元从来设置一个 AuthenticationProvider 时,即使没有指定对应关系的 AuthenticationProvider 东西,Spring Security 默许会运用 DaoAuthenticationProvider。DaoAuthenticationProvider 在举行认证的功夫须要一个 UserDetailsService 来获得用户的消息 UserDetails,个中囊括用户名、暗号和所具有的权力等。以是即使咱们须要变换认证的办法,咱们不妨实行本人的 AuthenticationProvider;即使须要变换认证的用户消息根源,咱们不妨实行 UserDetailsService。 实行了本人的 AuthenticationProvider 之后,咱们不妨在摆设文献中如许摆设来运用咱们本人的 AuthenticationProvider。个中 myAuthenticationProvider 即是咱们本人的 AuthenticationProvider 实行类对应的 bean。 <security:authentication-manager> <security:authentication-provider ref="myAuthenticationProvider"/> </security:authentication-manager> 实行了本人的 UserDetailsService 之后,咱们不妨在摆设文献中如许摆设来运用咱们本人的 UserDetailsService。个中的 myUserDetailsService 即是咱们本人的 UserDetailsService 实行类对应的 bean。...
春季安全配置和简单的应用体验

春季安全配置和简单的应用体验

开始咱们为 Spring Security 特意创造一个 Spring 的摆设文献,该文献就特意用来动作 Spring Security 的摆设。运用 Spring Security 咱们须要引入 Spring Security 的 NameSpace。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> </beans> Spring Security 定名空间的引入不妨简化咱们的开拓,它涵盖了大局部 Spring Security 常用的功效。它的安排是鉴于框架内大范畴的依附的,不妨被分别为以次几块。 Web/Http 安定:这是最搀杂的局部。经过创造 filter 和关系的 service bean 来实行框架的认证体制。当考察受养护的 URL 时会将用户引入登录界面大概是缺点提醒界面。 交易东西大概本领的安定:遏制本领考察权力的。 AuthenticationManager:处置来自于框架其余局部的认证乞求。 AccessDecisionManager:为 Web 或本领的安定供给考察计划。会备案一个默许的,然而咱们也不妨经过普遍 bean...
Spring Security intercept-url摆设

Spring Security intercept-url摆设

intercept-url摆设 指定阻挡的 url 经过 pattern 指定暂时 intercept-url 设置该当效率于哪些 url。 <security:intercept-url pattern="/**" access="ROLE_USER"/> 指定考察权力 不妨经过 access 属性来指定 intercept-url 对应 URL 考察所该当具备的权力。access 的值是一个字符串,其不妨径直是一个权力的设置,也不妨是一个表白式。常用的典型有大略的脚色称呼设置,多个称呼之间用逗点分割,如: <security:intercept-url pattern="/secure/**" access="ROLE_USER,ROLE_ADMIN"/> 在上述摆设中就表白 secure 路途下的一切 URL 乞求都该当具备 ROLE_USER 或 ROLE_ADMIN 权力。当 access 的值是以 “ROLE_” 发端的则将会交由 RoleVoter 举行处置。 其余,其还不妨是一个表白式,上述摆设即使运用表白式来表白的话则该当是如次这个格式。 <security:http use-expressions="true"> <security:form-login /> <security:logout />...
春季安全匿名认证

春季安全匿名认证

隐姓埋名认证 对于隐姓埋名考察的用户,Spring Security 扶助为其创造一个隐姓埋名的 AnonymousAuthenticationToken 寄存在 SecurityContextHolder 中,这即是所谓的隐姓埋名认证。如许在此后举行权力认证大概做其它操纵时咱们就不须要再确定 SecurityContextHolder 中持有的 Authentication 东西能否为 null 了,而径直把它当作一个平常的 Authentication 举行运用就 OK 了。 摆设 运用 NameSpace 时,http 元素的运用默许就会起用对隐姓埋名认证的扶助,然而咱们也不妨经过树立 http 元素下的 anonymous 元素的 enabled 属性为 false 停用对隐姓埋名认证的扶助。以次是 anonymous 元素不妨摆设的属性,以及它们的默许值。 <security:anonymous enabled="true" key="doesNotMatter" username="anonymousUser" granted-authority="ROLE_ANONYMOUS"/> key 用来指定一个在 AuthenticationFilter 和 AuthenticationProvider 之间共享的值。username 用来指定隐姓埋名用户所对应的用户名,granted-authority 用来指定隐姓埋名用户所具备的权力。...
Spring安全异常信息本地化

Spring安全异常信息本地化

特殊消息当地化 Spring Security 扶助将展示给结尾用户看的特殊消息当地化,那些消息囊括认证波折、考察被中断等。而对于展示给开拓者看的特殊消息和日记消息(如摆设缺点)则是不不妨举行当地化的,它们是以英文硬源代码在 Spring Security 的代码中的。在 Spring-Security-core-xxx.jar 包的 org.springframework.security 包下具有一个以英文特殊消息为普通的 messages.properties 文献,以及其它少许常用谈话的特殊消息对应的文献,如 messages_zh_CN.properties 文献。那么对于用户而言所须要做的即是在本人的 ApplicationContext 中设置如次如许一个 bean。 <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:org/springframework/security/messages" /> </bean> 即使要本人定制 messages.properties 文献,大概须要新增当地化扶助文献,则不妨 copy Spring Security 供给的默许 messages.properties 文献,将个中的实质举行窜改后再注入到上述 bean 中。比方我要定制少许华文的提醒消息,那么我不妨在 copy 一个 messages.properties 文献到类路途的 “com/xxx” 下,而后将其重定名为 messages_zh_CN.properties,并窜改个中的提醒消息。而后经过 basenames 属性注入到上述 bean...
春天安全记住 - 我的功能

春天安全记住 - 我的功能

Remember-Me 功效 概括 Remember-Me 是指网站不妨在 Session 之间记取登委派户的身份,简直来说即是我胜利认证一次之后在确定的功夫内我不妨不必再输出用户名和暗号举行登录了,体例会机动给我登录。这常常是经过效劳端发送一个 cookie 给存户端欣赏器,下次欣赏器再考察效劳端时效劳端不妨机动检验和测定存户端的 cookie,按照 cookie 值触发机动登录操纵。Spring Security 为那些操纵的爆发供给需要的钩子,而且对准于 Remember-Me 功效有两种实行。一种是大略的运用加密来保护鉴于 cookie 的 token 的安定,另一种是经过数据库或其它长久化保存体制来生存天生的 token。 须要提防的是两种实行都须要一个 UserDetailsService。即使你运用的 AuthenticationProvider 不运用 UserDetailsService,那么记取我将会不起效率,只有在你的 ApplicationContext 中具有一个 UserDetailsService 典型的 bean。 鉴于大略加密 token 的本领 当用户采用了记取我胜利登录后,Spring Security 将会天生一个 cookie 发送给存户端欣赏器。cookie 值由如次办法构成: base64(username+”:”+expirationTime+”:”+md5Hex(username+”:”+expirationTime+”:”+password+”:”+key)) username:登录的用户名。 password:登录的暗号。 expirationTime:token 作废的日子和功夫,以毫秒表白。 key:用来提防窜改...
春季安全机构识别基础

春季安全机构识别基础

Spring Security 的权力审定是由 AccessDecisionManager 接口控制的。简直来说是由个中的 decide()本领控制,其设置如次。 void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException; 如你所见,该本领接受三个参数,第一个参数是包括暂时用户消息的 Authentication 东西;第二个参数表白暂时正在乞求的受养护的东西,基础上去说是 MethodInvocation(运用 AOP)、JoinPoint(运用 Aspectj)和 FilterInvocation(Web 乞求)三种典型;第三个参数表白与暂时正在考察的受养护东西的摆设属性,如一个脚色列表。 Spring Security 的 AOP Advice 思维 对于运用 AOP 而言,咱们不妨运用几种各别典型的 advice:before、after、throws 和 around。个中 around advice 利害常适用的,经过它咱们不妨遏制能否要实行本领、能否要窜改本领的归来值,以及能否要抛出特殊。Spring Security 在对本领挪用和 Web 乞求时也是运用的 around advice 的思维。在本领挪用时,不妨运用规范的...
春季安全认证

春季安全认证

认证简介 认证进程 用户运用用户名和暗号举行登录。 Spring Security 将获得到的用户名和暗号封装成一个实行了 Authentication 接口的 UsernamePasswordAuthenticationToken。 将上述爆发的 token 东西传播给 AuthenticationManager 举行登录认证。 AuthenticationManager 认证胜利后将会归来一个封装了用户权力等消息的 Authentication 东西。 经过挪用 SecurityContextHolder.getContext().setAuthentication(…) 将 AuthenticationManager 归来的 Authentication 东西付与给暂时的 SecurityContext。 上述引见的即是 Spring Security 的认证进程。在认证胜利后,用户就不妨连接操纵去考察其它受养护的资源了,然而在考察的功夫将会运用生存在 SecurityContext 中的 Authentication 东西举行关系的权力审定。 Web 运用的认证进程 即使用户径直考察登录页面,那么认证进程跟上节刻画的基础普遍,不过在认证实行后将跳转到指定的胜利页面,默许是运用的根路途。即使用户径直考察一个受养护的资源,那么认证进程将如次: 启发用户举行登录,常常是重定向到一个鉴于 form 表单举行登录的页面,简直视摆设而定。 用户输出用户名和暗号后乞求认证,后盾仍旧会像上节刻画的那么获得用户名和暗号封装成一个 UsernamePasswordAuthenticationToken 东西,而后把它传播给 AuthenticationManager 举行认证。 即使认证波折将连接实行办法...
Spring Security session 处置

Spring Security session 处置

session 处置 Spring Security 经过 http 元素下的子元素 session-management 供给了对 Http Session 处置的扶助。 检验和测定 session 超时 Spring Security 不妨在用户运用仍旧超时的 sessionId 举行乞求时将用户启发到指定的页面。这个不妨经过如次摆设来实行。 <security:http> ... <!-- session 处置,invalid-session-url 指定运用仍旧超时的 sessionId 举行乞求须要重定向的页面 --> <security:session-management invalid-session-url="/session_timeout.jsp"/> ... </security:http> 须要提防的是 session 超时的重定向页面该当是不须要认证的,要不再重定向到 session 超时页面时会径直转到用户登录页面。其余即使你运用这种办法来检验和测定 session 超时,当你退出了登录,而后在没相关闭欣赏器的情景下又从新举行了登录,Spring Security 大概会缺点的汇报 session 仍旧超时。这是由于纵然你仍旧退出登录了,但当你树立 session 失效时,对应生存...