簡體   English   中英

使用ReactJS在Sprint引導中實現Spring Security

[英]Implementing Spring Security in Sprint boot with ReactJS

我正在嘗試使用Spring Boot和ReactJS通過Spring Security實現用戶名和密碼的基本登錄身份驗證。 我嘗試使用很少的在線示例來做到這一點,但是大多數情況都與JSP有關,而ReactJS卻一無所有。 我可以使用Spring Security的默認登錄名來執行此操作,但是當我嘗試使用ReactJS進行自定義登錄頁面時。 我找不到解決辦法。 任何幫助或指針都將受到高度贊賞。

**login.html**



 var App = React.createClass({

    getInitialState: function () {
           return {
            username: "",
            password: ""
            };
        },
        _onSubmit: function (event) {

            event.preventDefault();

              var data = {
                    username: this.state.username,
                    password: this.state.password
                }

                $.ajax({
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json'
                    },
                    type: "POST",
                    url: "/login",
                    data: JSON.stringify(data),
                    success: function(data){

                    }.bind(this),
                    error:function(data)
                    {
                        alert(data.responseJSON.message);
                    }
                });

        },
        _onUserNameChange: function (event) {
            this.setState({username: event.target.value});
        },
        _onPasswordChange: function (event) {
            this.setState({password: event.target.value});
        },
      render: function() {
    return (
      <Grommet.App>
        <Box pad='medium' align='center' >
          <Box pad={{ vertical: 'medium', horizontal: 'medium', between: 'medium' }} align='center'>
          </Box>
          <Box size='large' pad='medium'>
            <Section align='center' pad='small' separator='top'>
              <Label margin='none' uppercase={true}>Tool</Label>
            </Section>
          </Box>
          <Form pad='medium'>
            <FormField label='User Name' error={this.state.usernameError}>
              <input type='text' value={this.state.username} onChange={this._onUserNameChange} />
            </FormField>
            <FormField label='Password' value={this.state.password} onChange={this._onPasswordChange} error={this.state.passwordError}>
              <input type='password' />
            </FormField>
            <Footer pad={{ vertical: 'medium' }} direction='column'>
              <Button label='Login' primary={true} fill={true} onClick={this._onSubmit} type="submit" name="submit" />
            </Footer>
          </Form>
        </Box>
      </Grommet.App>
    );
      }

      });

        var element = document.getElementById('content');
        ReactDOM.render(React.createElement(App), element);




 **SecurityConfig.java**


 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{

@Override
public void configure(HttpSecurity httpSecurity) throws Exception{
    httpSecurity.authorizeRequests()
        .antMatchers("/*").hasRole("USER")
        .and()
    .formLogin()
         .loginProcessingUrl("/login.html");
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception{
    auth.inMemoryAuthentication()
        .withUser("user").password("password").roles("USER");

}

}

問題是登錄處理URL的路徑:您將憑證從ReactJS發布到/ login URL,但是在spring安全配置中,您正在偵聽/login.html

只需將配置更改為:

 .loginProcessingUrl("/login");

我認為可以。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM