JHipster单体应用的登录处理,集成了spring security。之前对 spring security不太了解,这次遇到一些问题,把自己的一些了解记录一下。
整体上单体不使用oauth的认证相对简单不少,在SecurityConfiguration中做下配置:
.and()
.rememberMe()
.rememberMeServices(rememberMeServices)
.rememberMeParameter("remember-me")
.key(jHipsterProperties.getSecurity().getRememberMe().getKey())
.and()
.formLogin()
.loginProcessingUrl("/api/authentication")
.successHandler(ajaxAuthenticationSuccessHandler)
.failureHandler(ajaxAuthenticationFailureHandler)
.usernameParameter("j_username")
.passwordParameter("j_password")
.permitAll()
浏览器访问url会经过 AbstractAuthenticationProcessingFilter 其中会对url进行匹配处理(根据loginProcessingUrl值【猜测】),所以登录页面的提交url是“api/authentication”(其中 用户名、密码 parameter名是"j_username"和"j_password") 如果匹配到是进行认证的url请求,会调用 UsernamePasswordAuthenticationFilter(AbstractAuthenticationProcessingFilter的子类) 的 attemptAuthentication方法,如果用户名/密码正确,会将用户信息放在SecurityContextHolder.getContext()(默认使用ThreadLocal实现), 如果 使用了 rememberMe 特性,后续的每次请求 会在 RememberMeAuthenticationFilter中 获取 SecurityContextHolder.getContext(),获取到用户信息 就转到后面的正常处理。
网友评论