我有Spring引导应用程序和src / main / webapp / my-login.html下的自定义登录页面 . 我将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 endpoints 似乎不对 .
3 回答
您可以设置视图控制器以将请求转发到my-login.html ...
如果要将AngularJS用于前端应用程序,则创建API身份验证 endpoints 可能是最佳解决方案 . 您可以使用任何您想要的身份验证机制,但是简单的基本身份验证(可选地带有一些持久性令牌)可以用于启动 . 所以,你会有一个特殊的终点,例如:
受基本身份验证保护的
/token POST
会在成功时返回一个令牌对象,该对象稍后可用于所有请求(例如在请求头中) .您的AngularJS将是一个完全独立的应用程序,它只使用您的API endpoints . 此应用程序可以选择将身份验证令牌保留在客户端会话中,因此用户无需在每次打开应用程序时输入凭据 . 此外,这是一个非常干净的解决方案,可以单独测试 . 此外,这种方式的前端应用程序可以由其他团队开发,而不需要任何有关Spring技术细节的知识 .
我使用formLogin属性玩了一点,并得到了这个解决方案:
这样我就可以将HTML文件作为登录页面返回,并使用干净的POST endpoints 来传递登录数据 .