Spring Security: Как разрешить доступ только к странице входа с помощью OAuth 2.0? - PullRequest
0 голосов
/ 23 января 2020

У меня есть проект Spring Boot, использующий библиотеки Spring Security и OAuth2.0. Я подтвердил, когда получил доступ к http://localhost:8080/login, отображается вид входа в систему по умолчанию, и я могу войти в систему.

enter image description here

Но если я реализую класс Config, показанный ниже :

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers( "/login**" ).permitAll()
                .anyRequest()
                .authenticated();
    }
}

Браузер возвращает «404 not found error». Я думал, что смогу пройти аутентификацию с прямым доступом к API Github, поэтому реализовал это, но это не сработало бы:

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(){
        return "redirect:/oauth2/authorization/github";
    }

Как мне справиться с этим? Я знаю, что у меня, вероятно, есть некоторые недоразумения из-за недостатка моих знаний, но я хочу знать, как разрешить доступ только к странице входа в систему, когда пользователь не аутентифицирован.
Спасибо.

1 Ответ

0 голосов
/ 24 января 2020

наконец решено! Мне нужно добавить следующие части в конец потока методов.

    .and()
    .oauth2Login()
    .loginPage("/login");

, поэтому окончательный код:

SecurityConfig.java
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/login**")
                .permitAll()
                .anyRequest()
                .authenticated()
                //appended
                .and()
                .oauth2Login()
                .loginPage("/login");
    }
}
Controller.java
    @GetMapping(value = "/login")
    public String getit(Model model){
        return "login";
    }
login.html
<body>
<a th:href="@{/oauth2/authorization/github}">Login</a>
</body>

Это сработало! Ссылочный URL: https://www.codeflow.site/ja/article/spring-security-5-oauth2-login

...