`
Wind_ZhongGang
  • 浏览: 259685 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表
     Spring  Security为我们提供了SessionAuthenticationStrategy接口来定制针对Session的一些特殊管理,如防Session的固定攻击, 防Session的单用户多次登陆等, 这些特殊的管理功能Spring Security都为我们提供了相应的类,如下示:       1. SessionFixationProtectionStrategy, 这个实现SessionAuthenticationStrategy的类是用于防止Session的固定攻击的         这里先从Session的固定攻击说起, 话说什么是Session的固定攻 ...
      Spring Security在验证用户登录后的另一个重要步骤就是对受保护资源进行授权判断,以确定当前登录用户是否具有相应的权限访问当前受保护资源,针对受保护资源的权限设置在相关安全配置文件中进行设定,而当用户登录后,用户的相应权限也就随之确定,将两者进行比较,查看访问当前受保护资源的权限是否在当前登录用户的权限列表中,这一系列的过程都是由FilterSecurityInterceptor过滤器来拦截的,相应的处理又由于过滤器分发到AccessDecisionManager接口的相应实现中,该接口有一个抽象的实现,名叫AbstractAccessDecisionManager,里面有 ...
     Spring Security的退出功能由LogoutFilter过滤器实现,只需要一段简单的配置就可以在项目中实现退出功能,如下示     <logout logout-url="/logout" logout-success-url="/login"/>       1.logout-url表示退出的URL地址   2.logout-success-url表示退出成功后应该转向的URL地址,默认实现类是根据这个URL构造一个SimpleUrlLogoutSuccessHandler类       根据这段配置Spr ...
      部分情况下用户希望能够在不知道其它用户账号及密码的情况下,直接通过内部系统切换到另一个用户,比如一个项目经理希望在一个项目管理系统中直接切换到他的项目组下的成员账号上去,这时候就可以考虑使用Spring Security提供的Switch user功能。Switch user功能的大致流程是向服务器发送一个切换用户的请求,请求参数要有用户名称,SwitchUserFilter拦截这个请求,并从中取出要切换的用户的用户名称进行处理。下面来看看如何配置一个Switch user功能吧。         1. 配置SwitchUserFilter     <bean ...
      Spring Security实现自动登录的基本流程是,在第一次登录成功时将相关用户凭证及相关自动登录所需信息保存起来,在下次未登录访问受限资源时,会从中取出相关信息进行验证来实现自动登录的效果。         Spring Security除了提供将用户凭证信息存储在Cookie以便下次登录时进行自动登录的方式外,还支持将相关用户凭证信息及自动登录所需信息存储在持久化存储中的方式,这里的持久化存储可以在内存中,可以在外部文件中,也可以在数据库中,实现不同方式的持久化存储都需要实现PersistentTokenRepository接口,里面定义了创建凭证,删除凭证,修改凭证的相 ...
    Spring Security为我们提供了两种方式的自动登录,一种是基于Cookie的自动登录,想实现这种自动登录功能,需要使用TokenBasedRememberMeServices类,如果想扩展自己的特殊登录,可以继承该类;一种是基于持久化存储的自动登录,需要使用PersistentTokenBasedRememberMeServices类,两者都继承了抽象类AbstractRememberMeServices,实现了RememberMeServices接口,查看RememberMeServices源代码可以发现,该接口提供了三个方法,autoLogin方法是实现自动登录功能的,lo ...
      验证登录失败后的处理的常见处理是返回到登录页面,并提醒用户发生了何种错误,Spring Security提供了一个通用的验证错误异常,这个抽象类的名字叫做AuthenticationException, 并且还提供了一个名为ExceptionMappingAuthenticationFailureHandler的验证发生异常进行处理的类, 查看源代码可以发现这个类中有一个类型为Map的属性,这个Map的Key值是验证异常的类名, Value值是验证失败后应该转向的URL地址, 这里我在每个URL地址后加上了一个名为error的参数, 参数的值不同代表不同的异常,为了实现前台登录邮件地 ...
     验证用户后主要有这样两种走向,一种是验证失败,一种是验证成功,验证失败后应该如何处理呢,验证成功又该如何处理呢?      验证失败的处理需要实现AuthenticationFailureHandler接口,我的前台用户认证失败的处理是这样的     package com.template.security.authentication.handler; import com.template.security.shared.DirectUrlResolver; import org.springframework.security.core.Authentica ...
   有了用户凭证后, 如何验证用户的凭证是否正确呢, 这就需要借助AuthenticationManager了, AuthenticationManager可以包含多个AuthenticationProvider, 每个AuthenticationProvider都会针对特定的AuthenticationToken, 也就是用户凭证来验证相应的用户凭证是否正确。      来看看我为了实现验证前台用户凭证和后台用户凭证而实现的AuthenticationProvider吧。     package com.template.security.authentication.provid ...
        前讲讲到AuthenticationFilter会拦截我们的登录表单提交信息并根据相应的信息构造出对应的用户凭证,这里的用户凭证将会贯穿整个Spring Security安全验证过程,如果验证用户凭证成功,我们可以为相应的用户凭证分配相应的权限,并将用户导向登录成功的界面。来看看这里的多种类型用户登录凭证的实现吧,这里主要实现了两种用户凭证,一种是前台用户登录凭证,一种是后台用户登录凭证。     package com.template.security.authentication.token; import org.springframework.securi ...
     当填写完成登录表单提交后,首先会被对应的提交表单提起的过滤器进行拦截,这里过滤器的作用就是拦截登录表单提交验证请求,并根据相应的表单信息构造对应的登录凭证,这里来看看过滤器是如何构造相应的用户凭证。     package com.template.security.filter; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframew ...
      接前讲,首先针对一个多种用户类型的登录需求,需要先实现多种用户类型的登录界面的展示,Spring Security提供了这样一个接口来帮助我们实现多种用户类型的登录界面的展示,这个接口就是AuthenticationEntryPoint, 实现这样一个接口,我们就可以随心所欲的控制登录界面的展示了,当我们访问一个受权限的资源,而当前又没有权限访问时,Spring Security就会将处理导向这个接口的实现。针对前讲我所提到的需求,在这里我将实现前台用户和后台用户登录界面的展示,先来看看我的源码实现吧,在这里为了实现多用户类型的登录,很多场景我都需要根据相应的请求参数或地址来判断我需 ...
      使用Spring Security 3 来实现多种用户类型的登录方式,在我看来,大致分为两大步,第一步是控制多种用户登录类型的登录界面的展示,第二步是控制多种用户登录的验证方式,而第二大步又可分为三个小步来展开,第一小步是验证过滤器,第二小步是验证凭证的制作,第三小步是验证用户凭证,在这里我将就这几步的分析与实现一步一步展开来进行描述。         这里我假定有这样一个系统,分为前台用户和后台用户两种用户类型,针对这两种不同的用户,相应的验证是不一样的,前台用户登录需要提供邮箱地址和电话号码,而后台用户需要提供我们在登录方式中最为常见的用户名,密码和验证码,两种登录类型的登录 ...
  讨论一下Hibernate中对象的一对多或多对一关联关系。这里以日志与日志评论来说明这样的关系,一个日志可以有多条评论,而一条评论则只能对应一个日志。     说明一对多的双向关联。它的现实意义就是从日志的角度可以得到该日志下的多条评论,而从评论的角度则可以知道它属于某个日志。     1.Diary.java   package com.template.model; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-7-20 * ...
  讨论下Hibernate中的一对一映射。     首先来了解一下一对一的单向关联映射,以Person与IDCard为例,一个人只能拥一张身份证,而一张身份证只能属于一个人,并且从Person的角度讲,需要知道拥有的是哪张IDCard,而从IDCard来讲,则没有这方面的需求。当然需求也不是死的,这里也只是举例而已,不必较真。   1.Person.java   package com.template.model; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-7-20 * Time ...
Global site tag (gtag.js) - Google Analytics