Spring Boot Oauth 自定义登录表单
Posted
技术标签:
【中文标题】Spring Boot Oauth 自定义登录表单【英文标题】:Spring Boot Oauth Custom Login Form 【发布时间】:2016-09-14 17:16:15 【问题描述】:我按照春季教程“使用 OAuth2 进行 SSO:Angular JS 和 Spring Security 第 V 部分”。
在自定义登录表单不再起作用之后,我将“authserver”项目从 maven 转换为 gradle。
登录表单需要 pom.xml 中的 wro 任务吗?
我也试过这个教程,但它在我的场景中也不起作用: http://docs.spring.io/spring-security/site/docs/3.2.x/guides/form.html
我希望你能帮助我。
日志文件:
2016-05-18 11:14:53.667 DEBUG 22312 --- [nio-9999-exec-9] o.s.security.web.FilterChainProxy : /login 在附加过滤器链中的第 14 个位置;触发过滤器:'LogoutFilter' 2016-05-18 11:14:53.667 调试 22312 --- [nio-9999-exec-9] os.s.w.u.matcher.AntPathRequestMatcher:请求 'GET /login' 不匹配 'POST /logout 2016-05-18 11:14:53.667 调试 22312 --- [nio-9999-exec-9] o.s.security.web.FilterChainProxy : /login 在附加过滤器链中的第 14 个位置;触发过滤器:'UsernamePasswordAuthenticationFilter' 2016-05-18 11:14:53.667 调试 22312 --- [nio-9999-exec-9] os.s.w.u.matcher.AntPathRequestMatcher:请求 'GET /login' 与 'POST /login' 不匹配 2016-05-18 11:14:53.667 调试 22312 --- [nio-9999-exec-9] o.s.security.web.FilterChainProxy : /login 在附加过滤器链中的第 14 个位置;触发过滤器:'DefaultLoginPageGeneratingFilter' 2016-05-18 11:14:53.667 调试 22312 --- [nio-9999-exec-9] w.c.HttpSessionSecurityContextRepository:SecurityContext 为空或内容是匿名的 - 上下文不会存储在 HttpSession 中。
OAuth2ServerConfiguration中的代码:
@Override
public void configure(HttpSecurity http) throws Exception
http.formLogin().loginPage("/login").permitAll()
.and().requestMatchers()
.antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
.and().authorizeRequests()
.anyRequest().authenticated();
MainAuthserverApplication.java:
@ComponentScan
@SessionAttributes("authorizationRequest")
@EnableAutoConfiguration()
@EnableConfigurationProperties(AuthProperties.class)
public class MainAuthserverApplication extends WebMvcConfigurerAdapter
@Override
public void addViewControllers(ViewControllerRegistry registry)
registry.addViewController("/login").setViewName("login");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
registry.addViewController("/oauth/confirm_access").setViewName("authorize");
【问题讨论】:
【参考方案1】:我已经自己解决了这个问题:
看来这两个方法必须在同一个类中:
@Configuration
@Order(-20)
protected static class LoginConfig extends WebSecurityConfigurerAdapter
@Autowired
private AuthenticationManager authenticationManager;
@Override
protected void configure(HttpSecurity http) throws Exception
// @formatter:off
http.formLogin().loginPage("/login").permitAll().and().requestMatchers()
.antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access").and().authorizeRequests()
.anyRequest().authenticated();
// @formatter:on
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
auth.parentAuthenticationManager(authenticationManager);
【讨论】:
嗨,詹斯,你能在 github 上分享你的工作吗?我做了同样的事情,但我的不工作以上是关于Spring Boot Oauth 自定义登录表单的主要内容,如果未能解决你的问题,请参考以下文章
如何从 facebook/google/... oauth2 身份验证在 Spring (Boot) 中为单页应用程序派生自定义登录令牌?
如何配置 Spring Boot 和 Spring Security 以支持表单登录和 Google OAuth2 登录
在 Spring Boot OAUTH2 中返回 RESTful/json 响应而不是登录表单