我试图通过提供基于用户名和密码的登录以及用于用户身份验证的GoogleOAuth来实现SpringBoot的基本登录页面。想知道spring是否允许在同一个应用程序中实现这一点。任何帮助都将不胜感激。
slwdgvem1#
是的,可以做到。您需要在WebSecurity配置器中配置oauth2和表单登录,并配置自定义登录页面。您还需要为表单登录配置passwordencoder和userdetailsservice,并为oauth2登录配置oauth2userservice(可能还有oidcuserservice)。主体实现将对应于登录的类型。 WebSecurityConfigurer.configure(HttpSecurity) :
WebSecurityConfigurer.configure(HttpSecurity)
@Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/**") .authorizeRequests(t -> t.anyRequest().authenticated()) .formLogin(t -> t.loginPage("/login").permitAll()) .oauth2Login(Customizer.withDefaults()) .logout(t -> t.logoutRequestMatcher(new AntPathRequestMatcher("/logout")) .logoutSuccessUrl("/").permitAll()); ... }
自定义登录页面,包括表单登录和oauth2提供程序链接:
<div> <div> <div> <form th:object="${form}"> <input type="email" th:name="username" th:placeholder="'E\'mail Address'"/> <label th:text="'E\'mail Address'"/> <input type="password" th:name="password" th:placeholder="'Password'"/> <label th:text="'Password'"/> <button type="submit" th:text="'Login'"/> <th:block th:if="${! oauth2.isEmpty()}"> <hr/> <a th:each="client : ${oauth2}" th:href="@{/oauth2/authorization/{id}(id=${client.registrationId})}" th:text="${client.clientName}"/> </th:block> </form> </div> </div> <div> <div> <p th:if="${param.error}">Invalid username and password.</p> <p th:if="${param.logout}">You have been logged out.</p> </div> </div> </div>
oauth2配置:
--- spring: security: oauth2: client: registration: google: client-id: XXXXXXXXXXXXXXXXXXXX client-secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX provider: google: user-name-attribute: email
这摘自我在https://blog.hcf.dev/article/2020-10-31-spring-boot-part-07 (源代码位于https://github.com/allen-ball/spring-boot-web-server/tree/trunk/part-07).
1条答案
按热度按时间slwdgvem1#
是的,可以做到。您需要在WebSecurity配置器中配置oauth2和表单登录,并配置自定义登录页面。您还需要为表单登录配置passwordencoder和userdetailsservice,并为oauth2登录配置oauth2userservice(可能还有oidcuserservice)。主体实现将对应于登录的类型。
WebSecurityConfigurer.configure(HttpSecurity)
:自定义登录页面,包括表单登录和oauth2提供程序链接:
oauth2配置:
这摘自我在https://blog.hcf.dev/article/2020-10-31-spring-boot-part-07 (源代码位于https://github.com/allen-ball/spring-boot-web-server/tree/trunk/part-07).