如何在我的React-SpringBoot应用程序中使用Spring Security

时间:2019-11-25 05:54:26

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

几乎没有上下文可以解决这个问题,我在Springboot中对前端实现做了反应。

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

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

在为我的项目添加了春季安全性之后,我意识到它为“ / 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应用目录中,而我在spring boot目录中没有另一个登录页面。 我尝试使用.jsp登录页面作为中介,该页面可以与Spring Security进行对话,并从react方面对其进行发布请求,但实际上无法使用此方法做任何事情。

那么还有其他方法可以让React提供登录页面,而该页面仍然可以与Spring安全性交互吗?

谢谢

Paras

2 个答案:

答案 0 :(得分:0)

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

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

Link to a "JWT authentication with spring" article

答案 1 :(得分:0)

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

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

因此,基本上,您的react和spring boot应用程序不会在不同的端口上运行,并且将被组合为单个spring boot应用程序。