【问题标题】:How can I use Spring Security with my React-SpringBoot application如何在我的 React-Spring Boot 应用程序中使用 Spring Security
【发布时间】:2020-03-20 09:33:29
【问题描述】:

从小上下文开始这个问题,我做了前端与 springboot 中的后端实现反应。

在我开发时,我在 package.json 中设置了"proxy": "http://localhost:8080/",,以便它可以将我的请求代理到 localhost:8080,它是 spring 的 tomcat 服务器。

对于生产,我使用 frontend-maven-plugin 构建 react 应用程序和 maven-antrun-plugin 将 react 生产构建复制到后端目录(target/classes/public),最后部署到 heroku。

在我的项目中添加 Spring Security 后,我意识到它增加了对“/login”上登录页面的支持,我通过更改 http.loginPage() 将其更改为“/my-login”

@Override
protected void configure(HttpSecurity http) throws Exception{
  http.authorizeRequests()
      .anyRequest()
      .authenticated()
      .and()
      .formLogin()
      .loginPage("/my-login")
      .permitAll(true)
      .and()
      .logout()
      .logoutSuccessUrl("/my-login?logout")
      .permitAll();
  http.cors();

现在的问题是我的登录页面在 react app 目录中,我不能在 spring boot 目录中有另一个登录页面。 我尝试使用 .jsp 登录页面作为中间体,该页面将与 Spring Security 对话并从 react 方对其发出发布请求,但实际上无法用这种方法做任何事情。

那么有没有其他方法可以让 react 提供登录页面,仍然可以与 spring security 交互?

谢谢,

帕拉斯

【问题讨论】:

  • 你有没有想过这个问题?我遇到了同样的问题。 SpringBoot 后端与 Spring Security 和 React 前端

标签: java reactjs spring spring-boot spring-security


【解决方案1】:

Reactjs 进行客户端渲染,因为它是一个 Javascript 库,而如果您使用 springboot 作为后端,则必须制作进行服务器端渲染的 jsp 页面。它们通常不会相互补充。对于 React 应用程序,您通常应该将 REST API 作为后端,并根据响应呈现网页中的更改。

现在,如果您确定您只想要一个 Spring Boot 应用程序作为后端,则必须将登录 html 页面转换为响应 springboot 的 jsp 页面并在那里呈现您的组件。登录成功后,您会将用户重定向到另一个 jsp 页面,该页面将呈现您的整个 React 应用程序。

所以基本上你的 react 和 spring boot 应用程序不会在不同的端口上运行,而是会组合成一个 spring boot 应用程序。

【讨论】:

  • 我知道这已经过时了,但是您能否指出一些示例,说明一旦用户通过身份验证,JSP 页面将如何呈现 React 应用程序?即,可能在登录成功时,用户将被路由到 React /home 页面
  • @PeterKronenberg 不会有反应页面。例如。如果你创建了你的 react 应用程序,构建它,你将获得 Js 代码。现在在您的 JSP 文件中提供该 Js 代码。所以基本上你不必处理一旦建成反应。您可以正常使用 JSP。
【解决方案2】:

我刚刚开始使用 spring ...但通常对于 React 应用程序,身份验证是无状态的...我们设置包含令牌的 Authorization 标头(例如:jwt),并且我们有一个注销端点,该端点使令牌。所以注销请求上的 200 = "/my-login?logout"。并且任何路由中的 403 都被“客户端”路由器重定向到“/my-login”

您采用的方法要求视图是“服务器端”渲染的。据我所知,React SSR(服务器端渲染)是 NodeJS 服务器独有的。

Link to a "JWT authentication with spring" article

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2019-05-08
    • 2016-08-26
    • 2020-03-17
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多