繁体   English   中英

Spring Security表单登录

[英]Spring Security form login

我在src / main / webapp / my-login.html下有带有自定义登录页面的Spring Boot应用程序。 我将Spring Security配置如下:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and()
                .formLogin().loginPage("/my-login").permitAll().and()
                .csrf().disable();
    }
}

如何使HTTP GET到/ my-login返回我的HTML页面? 我知道它的名称是“ my-login.html”,而不是简单的“ my-login”,但是删除.html扩展名会使Chrome变得疯狂(尝试下载文件...)。 我尝试将HTML文件(带有或不带有扩展名)放在src / main / webapp或src / main / resources / static下。

另外请注意,我没有使用Thymeleaf,目标前端框架将是AngularJS。 我对优雅的解决方案也很感兴趣(我想我想要实现的目标非常简单)-我认为我已使它与loginPage(“ / my-login.html”)一起使用,但是REST端点似乎不正确。

您可以设置一个视图控制器以将请求转发到my-login.html ...

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/my-login").setViewName("forward:/my-login.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }

}

如果要将AngularJS用于前端应用程序,则创建API身份验证终结点可能是最好的解决方案。 您可以使用任何希望的身份验证机制,但是简单的基本身份验证(可选地带有一些持久性令牌)可以很好地启动。 因此,您将拥有一个特殊的端点,例如:

受基本身份验证保护的/token POST成功后会返回一个令牌对象,该令牌对象以后可用于所有请求(例如,在请求标头中)。

您的AngularJS将是一个完全独立的应用程序,仅消耗您的API端点。 该应用程序可以选择将身份验证令牌保留在客户端会话中,因此用户不必在每次打开应用程序时都输入凭据。 另外,这是一个非常干净的解决方案,可以轻松地单独进行测试。 同样,通过这种方式,前端应用程序可以由其他团队开发,而无需任何有关Spring技术细节的知识。

我对formLogin属性进行了更多操作,然后获得以下解决方案:

formLogin().loginPage("/my-login.html").loginProcessingUrl("/my-login").defaultSuccessUrl("/my-home.html", true).permitAll()

这样,我将HTML文件作为登录页面返回,并将一个干净的POST端点用于传递登录数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM