Как я могу исправить проблемы, связанные с CSRF, если он включен с помощью Spring Boot с Spring Security? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть приложение весенней загрузки. Я использую Spring Security. Я сталкиваюсь с двумя проблемами, когда CSRF включен. Пожалуйста, найдите ниже вопросы, код и скриншоты. Может кто-нибудь, пожалуйста, помогите мне исправить это?

  1. Когда сервер перезагружается, при первом входе в систему всегда происходит сбой Это дает ошибку 404. Но это успешный во второй раз.
  2. Я использую customAuthenticationFailureHandler в случае, если логин не удалось, я устанавливаю сообщение об ошибке в сеансе и перенаправляю его войти в JSP, чтобы отобразить его. Это работало нормально, прежде чем CSRF был включен. Теперь, похоже, что значение, сохраненное в сеансе, уничтожено

Настройка безопасности

@Override
    protected void configure(HttpSecurity http) throws Exception {

        //http.csrf().disable();
            http
                .authorizeRequests()                 
                .antMatchers("/ui/static/assets/**").permitAll()  
                 .antMatchers("/register","/forgotPassword").permitAll()
                .anyRequest().authenticated()
                .and()
        .formLogin()
                .loginPage("/LoginPage")
                .loginProcessingUrl("/authenticate")
                .permitAll()
                .defaultSuccessUrl("/addDocument")                                
                .failureHandler(customAuthenticationFailureHandler)        
                .and().exceptionHandling().accessDeniedPage("/Access_Denied")
                .and().logout().permitAll().invalidateHttpSession(true);
    }

CustomAuthenticationFailureHandler

@Component
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler { 


    @Override
    public void onAuthenticationFailure(
        HttpServletRequest request,
        HttpServletResponse response,
        AuthenticationException exception) 
        throws IOException, ServletException {


      String errMsg=exception.getMessage();;
      request.getSession().setAttribute("loginErrorMessage", errMsg);
      response.setStatus(HttpStatus.UNAUTHORIZED.value());
      response.sendRedirect(request.getContextPath()+"/login?error");

  }
}

Login.jsp

<c:set var="params" value="${requestScope['javax.servlet.forward.query_string']}"/>

                                <div class="account-content">   
                                    <c:if test="${params eq 'error' && loginErrorMessage ne null}">
                                        <div class="alert alert-danger alert-dismissible fade show" role="alert">
                                             <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                                 <span aria-hidden="true">×</span>
                                             </button>
                                             <strong>${loginErrorMessage}</strong>
                                         </div>                          
                                    </c:if>    

                                    <form action="${pageContext.servletContext.contextPath}/authenticate" class="form-horizontal" method="post" id="formLogin" data-parsley-validate="">                                        
                                        <sec:csrfInput /> 
                                        <div class="form-group m-b-25">
                                            <div class="col-12">
                                                <label for="emailaddress">Email address<span class="text-danger">*</span></label>
                                                <input class="form-control input-lg" type="email" name="username" id="username"  placeholder="Enter your email" data-parsley-required="true">

                                            </div>
                                        </div>

                                        <div class="form-group m-b-25">
                                            <div class="col-12">
                                                <a href="<%=request.getContextPath()%>/forgotPassword" class="text-danger float-right">Forgot your password?</a>
                                                <label for="password">Password<span class="text-danger">*</span></label>
                                                <input class="form-control input-lg" type="password" id="pwd" name="password" placeholder="Enter your password" data-parsley-required="true">

                                            </div>
                                        </div>


                                        <div class="form-group account-btn text-center m-t-10">
                                            <div class="col-12">

                                                <button class="btn w-lg btn-rounded btn-lg btn-primary waves-effect waves-light" 
                                                id="signInBtn" type="submit" value="Next" >Sign In
                                                <i class="fas fa-spinner fa-spin" id="loadingBtn" style="display:none;"></i></button>               
                                            </div>
                                        </div>

                                    </form>

                                    <div class="clearfix"></div>

                                </div>

enter image description here

...