首先,希望还对 spring-security框架完全不懂的新手 下载下Git源码。 引入到项目中。这个短文就是边看源码边聊的。也会启动下项目验证自己的推想。

 

一、登陆认证的登陆配置项

<form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" default-target-url="/index.ht" 
  username-parameter="username" password-parameter="password" login-processing-url="/j_spring_security_check"/> 
<logout logout-url="/logout.ht"/>

 

看到这个配置,其实就大略明白了。 这就像配置了一个control/Servlet, userName 参数名字为 ”name“,password 为”password“

然后校验用户密码,通过就跳转的页面为 index.ht 。 


 

spring-security框架维护了一个过滤器链来提供服务, 而<form-login/> 这个登陆配置项其实创建了一个名为UsernamePasswordAuthenticationFilter的过滤器 。

框架提供的这些过滤器,也包括<custom-filter/>配置的过滤器。都是通过假名有严格顺序来执行的。稍后详细介绍自定义过滤器。

UsernamePasswordAuthenticationFilter : 

正如我们配置的这些参数,也会有默认配置的   比如

usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY =“j_username”,

passwordParameter=“j_password”

默认接受form请求地址 :j_spring_security_check ,

这些可配置的参数,都会存在默认参数。这些参数的读取是在 Initializing Spring root WebApplicationContext 后,加载并且解析xml配置文件。然后初始化ioc 容器。形成上面所提的过滤器链。

 

二、简单说一下解析xml 过程

HttpSecurityBeanDefinitionParser.parse() {  filterChains.add(createFilterChain(element, pc)); }

createFilterChain方法会调用 AuthenticationConfigBuilder的构造方法 初始化各种filter        createFormLoginFilter(sessionStrategy, authenticationManager); 即为登录配置信息xml的解析处理方法:

 

spring-security 登陆认证之初次探究

 

SecurityNamespaceHandler.parse(Element element, ParserContext pc)  //

关键代码:

String name = pc.getDelegate().getLocalName(element); 
BeanDefinitionParser parser = parsers.get(name); 
通过配置项的名字。以策略模式获取到专用解析器 都实现自BeanDefinitionParser 接口, 通过父类的引用执行子类的具体实现。调用这些子类的parse()方法eg:RememberMeBeanDefinitionParser,LogoutBeanDefinitionParser等、、
错误代码不必看

相关文章:

  • 2022-12-23
  • 2021-09-25
  • 2022-12-23
  • 2022-02-13
  • 2021-05-02
  • 2021-04-15
  • 2022-12-23
猜你喜欢
  • 2023-03-28
  • 2022-12-23
  • 2021-08-29
  • 2021-07-07
  • 2022-12-23
  • 2021-11-01
相关资源
相似解决方案