SpringSecurity3.1入门教程(二)

一.前言

看过我的上篇文章《SpringSecurity3.1入门教程(一)》,相信对SS也有个大概的了解了,这篇文章就来深入的讲解下SS的一些概念及功能。

SpringSecurity3.1入门教程(一):{

网址:http://blog.csdn.net/u012557538/article/details/49953017
例子源码:http://download.csdn.net/detail/u012557538/9287445
}

二.接口

1.Authentication:认证对象,主体对象,主要包含getAuthorities()getPrincipal();方法。就是说主要由权限(角色)对象和 用户对象组成,需要注意的是这里的用户对象UserDetails,它是Security内设定的包含6个属性的接口,在UserDetails和拓展UserDetails会继续讲解。

2.SecurityContextHolder:提供几种访问SecurityContext的方式。

3.SecurityContext:保存Authentication信息,和请求对应的安全信息。

4.HttpSessionContextIntegrationFilter,为了在不同请求使用,把SecurityContext保存到 HttpSession里。

5.GrantedAuthority赋予到主体的角色,只有一个方法。String getAuthority();

6.AuthenticationManager :接口,认证管理器。

7.AuthenticationProviders :认证供应器。

     当我们使用 authentication-provider 元素来定义一个 AuthenticationProvider 时,如果没有指定对应关联的 AuthenticationProvider 对象,Spring Security 默认会使用 DaoAuthenticationProvider。DaoAuthenticationProvider 在进行认证的时候需要一个 UserDetailsService 来获取用户的信息 UserDetails。所以如果我们需要改变认证的方式,比如说增加个验证码,我们可以实现自己的 AuthenticationProvider;如果需要改变认证的用户信息来源,我们可以实现 UserDetailsService和扩展UserDetails。

8.UserDetailsService:接口,它提供了获得保证 非空的认证信息,比如用户名,密码,授予的权限和用户账号是可用还是禁用。

只有一个loadUserByUsername(name)方法,这个方法最主要的目的是要返回一个UserDetails对象。返回后Security内部会借助这个对象和用户输入的用户名和密码进行匹配,匹配成功则认证成功,可认证成功并不说明你就能登录系统了,认证完还要进一步验证授权状况,即查看你是否有权限查看请求的资源。

9.UserDetails:接口。它还有个实现类User。UserDetails是组成Authentication对象的一部分,对应AuthenticationgetPrincipal();

默认的UserDetails有6个方法

public interface UserDetails extends Serializable {

    GrantedAuthority[] getAuthorities();

    String getPassword();

    String getUsername();

    boolean isAccountNonExpired();//账号是否过期

    boolean isAccountNonLocked();//账号是否锁定(多次输错密码)

    boolean isCredentialsNonExpired();//密码是否过期

    boolean isEnabled();//是否被禁用

}


10.AccessDecisionManager:决策管理器,负责最终访问控制的决定,说白了就是我来决定你可以访问什么资源(url,method),它有一个 decide方法,可以获得一个 Authentication对象。展示主体的请求权限

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三.认证流程

1.用户输入用户名和密码提交请求(注意,security默认是只支持用户名和密码)

2.security过滤器拦截用户请求,进行认证,认证会调用认证管理器,认证供应器和用户信息细节接口,

3.(硬编码的UserDetailsService就不讲解了,这里针对自定义UserDetailsService来讲)。拦截后自动进入UserDetailsService调用loadUserByUsername(name)通过用户名查找用户,这里要搞清楚这里的参数name你表单填写好后提交请求会自动传递到该方法参数,如果用户不存在则抛出异常,若用户A存在,则需进一步构造UserDetails对象,(其实就是构造UserDetailsd的实现类User对象),此时需要获取用户A的用户名,密码,账号是否可用等,(用户名和密码是必须的),由于设计数据库时用户和角色的对应关系在另外一张表上,所以要另外通过DAO获取到用户拥有的角色。然后构造UserDetails,构造完返回这个对象就可以了,我们并不需要显示调用loadUserByUsername方法,Security内部会自动调用,然后通过这个UserDetails对象来匹配用户表单输入的用户名和密码,如果匹配,则认证成功,然后验证授权状况,授权也通过,则匹配 <form-login  default-target-url="/index.jsp">跳转到指定页面。


OK,基本概念说完了,下篇开始就开始讲解Security的一些配置,功能之类的。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值