스프링 보안 로그인은 항상 메시지없이 오류 페이지에 도착합니다

ffuentes;

스프링에서 작은 프로젝트에 로그인 양식을 사용하고 있지만 로그인 양식을 사용하여 로그인 할 때마다 오류 리디렉션이 발생한다는 작은 문제가 있습니다.

이것은 내 SecurityConfiguration.java입니다.

package com.ffuentese;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
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.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    private DataSource dataSource;

    @Value("${spring.queries.users-query}")
    private String usersQuery;

    @Value("${spring.queries.roles-query}")
    private String rolesQuery;

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.
            jdbcAuthentication()
                .usersByUsernameQuery(usersQuery)
                .authoritiesByUsernameQuery(rolesQuery)
                .dataSource(dataSource)
                .passwordEncoder(bCryptPasswordEncoder);
    }

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

        http.
            authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/login").permitAll()
                .antMatchers("/registration").permitAll()
                .antMatchers("/**").hasAuthority("ADMIN").anyRequest()
                .authenticated().and().csrf().disable().formLogin()
                .loginPage("/login").failureUrl("/login?error=true")
                .defaultSuccessUrl("/home")
                .usernameParameter("email")
                .passwordParameter("password")
                .and().logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/").and().exceptionHandling()
                .accessDeniedPage("/access-denied");
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web
           .ignoring()
           .antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**");
    }

}

내 로그인 양식 :

<form th:action="@{/login}" method="POST" class="form-signin">
    <h3 class="form-signin-heading" th:text="Welcome"></h3>
    <br/>

    <input type="text" id="email" name="email"  th:placeholder="Email"
        class="form-control" /> <br/> 
    <input type="password"  th:placeholder="Password"
        id="password" name="password" class="form-control" /> <br /> 

    <div align="center" th:if="${param.error}">
        <p style="font-size: 20; color: #FF1C19;">Email or contraseña errónea, por favor intente nuevamente.</p>
    </div>
    <button class="btn btn-lg btn-primary btn-block" name="Submit" value="Login" type="Submit" th:text="Login"></button>
</form>

내 loginController.java

package com.ffuentese;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.ffuentese.User;

@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @RequestMapping(value={"/", "/login"}, method = RequestMethod.GET)
    public ModelAndView login(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("login");
        return modelAndView;
    }

    @RequestMapping(value="/home", method = RequestMethod.GET)
    public ModelAndView homeV(){
        ModelAndView modelAndView = new ModelAndView();
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        modelAndView.setViewName("home");
        return modelAndView;
    }


    @RequestMapping(value="/registration", method = RequestMethod.GET)
    public ModelAndView registration(){
        ModelAndView modelAndView = new ModelAndView();
        User user = new User();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("registration");
        return modelAndView;
    }

    @RequestMapping(value = "/registration", method = RequestMethod.POST)
    public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) {
        ModelAndView modelAndView = new ModelAndView();
        User userExists = userService.findUserByEmail(user.getEmail());
        if (userExists != null) {
            bindingResult
                    .rejectValue("email", "error.user",
                            "There is already a user registered with the email provided");
        }
        if (bindingResult.hasErrors()) {
            modelAndView.setViewName("registration");
        } else {
            userService.saveUser(user);
            modelAndView.addObject("successMessage", "User has been registered successfully");
            modelAndView.addObject("user", new User());
            modelAndView.setViewName("registration");

        }
        return modelAndView;
    }

    @RequestMapping(value="/admin/home", method = RequestMethod.GET)
    public ModelAndView home(){
        ModelAndView modelAndView = new ModelAndView();
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        User user = userService.findUserByEmail(auth.getName());
        modelAndView.addObject("userName", "Welcome " + user.getName() + " " + user.getLastName() + " (" + user.getEmail() + ")");
        modelAndView.addObject("adminMessage","Content Available Only for Users with Admin Role");
        modelAndView.setViewName("admin/home");
        return modelAndView;
    }


}

따라서 로그인에서 / home으로 이동하는 대신 / error에 착륙합니다. 오류 자체는 다음과 같은 코드입니다.

{ "timestamp": "2018-04-04T21 : 28 : 28.944 + 0000", "status": 999, "error": "None", "message": "메시지 없음"}

/ error에서 이동하여 보호 된 URL로 이동하면 열 수 있기 때문에 양식이 작동합니다.

편집이 : 원래 코드는이 저장소에서오고 난 내 자신의 프로젝트에 적응 https://github.com/gustavoponce7/SpringSecurityLoginTutorial 도 설명 여기

EDit : 또 다른 중요한 점은 로그인 한 다음 다시 로그인하면 사용자가 예상대로 로그인을 / home으로 가져 가면 양식이 제대로 작동하는 것입니다. 이상하다.

Jacek Kuliś :

어쩌면이 더있다, 그것에 대해 없습니다 RequestMappingParam오류가 발생했습니다. 가능한 해결책

@RequestMapping(value={"/", "/login"}, method = RequestMethod.GET)
    public ModelAndView login(@RequestParam(value = "error", required = false)){
        ModelAndView modelAndView = new ModelAndView();
        if (error != null) {
          modelAndView.setViewName("error page");
        } else modelAndView.setViewName("login");

        return modelAndView;
    }

편집 1

프로젝트에 다음 폴더가 모두 없어서 발생할 수도 있습니다. "/static/**", "/js/**", "/css/**", "/img/**", "/json/**"이 구성을 삭제하거나 모든 폴더를 추가하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

스프링 부트가있는 스프링 보안, 사용자 정의 로그인 페이지, 오류 403

분류에서Dev

모든 사용자가 다른 페이지에 액세스하려는 경우에도 로그인 페이지를 먼저보고 싶습니다. 스프링 보안에서 로그인 페이지로 리디렉션해야합니다.

분류에서Dev

로그인하지 않은 상태에서도 보안 페이지를 볼 수 있습니다.

분류에서Dev

에뮬레이터로 Firestore 보안 규칙을 테스트하려고하면 항상 시간 초과 오류가 발생합니다.

분류에서Dev

스프링 보안이 예상대로 작동하지 않습니다.

분류에서Dev

오류 페이지 이상으로 Symfony 보안 주석에 응답

분류에서Dev

로그인 페이지를 만들 수 있지만 상태 이메일에 오류가 발생합니다.

분류에서Dev

로그인 페이지를 만들 수 있지만 상태 이메일에 오류가 발생합니다.

분류에서Dev

스프링 보안 및 각도 자바 스크립트가 로그인 페이지로 리디렉션

분류에서Dev

스프링 보안을 구현 한 후 jsf 페이지에 이미지 표시 오류

분류에서Dev

스프링 보안을 구현 한 후 jsf 페이지에 이미지 표시 오류

분류에서Dev

Spring Security-로그인 페이지를 가져올 때 보안이 인증을 시도하고 401 오류를 반환합니다.

분류에서Dev

Java 프로그램은 오류 메시지없이 무한 루프를 유지합니다.

분류에서Dev

스프링 보안은 상태 코드가 999 인 페이지로 리디렉션

분류에서Dev

항상 오류 메시지가 표시됨 : 중력이 왼쪽 인 서랍 뷰를 찾을 수 없습니다.

분류에서Dev

오류 : 페이지 매김 (...) : 렌더링에서 반환 된 항목이 없습니다. 이것은 일반적으로 return 문이 없음을 의미합니다. 또는 아무것도 렌더링하지 않으려면 null을 반환합니다.

분류에서Dev

`plnkr`-타이프 스크립트`인터페이스`를 내보내는 동안`예기치 않은 토큰 내보내기`로 오류가 발생합니다.

분류에서Dev

로그인 페이지에 오류 메시지를 표시 할 수없는 이유는 무엇입니까?

분류에서Dev

Apigee BaaS가 이상한 오류 메시지를 이메일로 보냅니다.

분류에서Dev

안드로이드 지원 Multidex은 여전히 '를 통해 메인 덱스 파일에서 64K 방법보다'오류가 발생합니다

분류에서Dev

오류 메시지 봄 보안 4 사용자 정의 로그인 양식을 얻을 수 없습니다

분류에서Dev

페이지는 항상 오류 페이지로 리디렉션됩니다.

분류에서Dev

PHP 기반 시스템에서 동일한 페이지에 로그인 오류 메시지를 표시하는 방법은 무엇입니까?

분류에서Dev

스프링 보안 로그인 오류 : HTTP 상태 404-/ j_spring_security_check

분류에서Dev

중포 기지 클라우드 기능 오류 코드 및 오류 메시지가 항상 안드로이드의 내부입니다

분류에서Dev

Windows beforeunload는 저장할 보류중인 변경 사항이없는 경우에도 경고 메시지를 표시합니다.

분류에서Dev

안드로이드 스튜디오 이미지보기에서 이미지를 표시 할 수 없습니다

분류에서Dev

프로세스 페이지에서 PHP의 인덱스 페이지로 서버 측 오류 메시지 표시

분류에서Dev

스프링 보안 4 / 로그인은 필터를 통과하지 않습니다.

Related 관련 기사

  1. 1

    스프링 부트가있는 스프링 보안, 사용자 정의 로그인 페이지, 오류 403

  2. 2

    모든 사용자가 다른 페이지에 액세스하려는 경우에도 로그인 페이지를 먼저보고 싶습니다. 스프링 보안에서 로그인 페이지로 리디렉션해야합니다.

  3. 3

    로그인하지 않은 상태에서도 보안 페이지를 볼 수 있습니다.

  4. 4

    에뮬레이터로 Firestore 보안 규칙을 테스트하려고하면 항상 시간 초과 오류가 발생합니다.

  5. 5

    스프링 보안이 예상대로 작동하지 않습니다.

  6. 6

    오류 페이지 이상으로 Symfony 보안 주석에 응답

  7. 7

    로그인 페이지를 만들 수 있지만 상태 이메일에 오류가 발생합니다.

  8. 8

    로그인 페이지를 만들 수 있지만 상태 이메일에 오류가 발생합니다.

  9. 9

    스프링 보안 및 각도 자바 스크립트가 로그인 페이지로 리디렉션

  10. 10

    스프링 보안을 구현 한 후 jsf 페이지에 이미지 표시 오류

  11. 11

    스프링 보안을 구현 한 후 jsf 페이지에 이미지 표시 오류

  12. 12

    Spring Security-로그인 페이지를 가져올 때 보안이 인증을 시도하고 401 오류를 반환합니다.

  13. 13

    Java 프로그램은 오류 메시지없이 무한 루프를 유지합니다.

  14. 14

    스프링 보안은 상태 코드가 999 인 페이지로 리디렉션

  15. 15

    항상 오류 메시지가 표시됨 : 중력이 왼쪽 인 서랍 뷰를 찾을 수 없습니다.

  16. 16

    오류 : 페이지 매김 (...) : 렌더링에서 반환 된 항목이 없습니다. 이것은 일반적으로 return 문이 없음을 의미합니다. 또는 아무것도 렌더링하지 않으려면 null을 반환합니다.

  17. 17

    `plnkr`-타이프 스크립트`인터페이스`를 내보내는 동안`예기치 않은 토큰 내보내기`로 오류가 발생합니다.

  18. 18

    로그인 페이지에 오류 메시지를 표시 할 수없는 이유는 무엇입니까?

  19. 19

    Apigee BaaS가 이상한 오류 메시지를 이메일로 보냅니다.

  20. 20

    안드로이드 지원 Multidex은 여전히 '를 통해 메인 덱스 파일에서 64K 방법보다'오류가 발생합니다

  21. 21

    오류 메시지 봄 보안 4 사용자 정의 로그인 양식을 얻을 수 없습니다

  22. 22

    페이지는 항상 오류 페이지로 리디렉션됩니다.

  23. 23

    PHP 기반 시스템에서 동일한 페이지에 로그인 오류 메시지를 표시하는 방법은 무엇입니까?

  24. 24

    스프링 보안 로그인 오류 : HTTP 상태 404-/ j_spring_security_check

  25. 25

    중포 기지 클라우드 기능 오류 코드 및 오류 메시지가 항상 안드로이드의 내부입니다

  26. 26

    Windows beforeunload는 저장할 보류중인 변경 사항이없는 경우에도 경고 메시지를 표시합니다.

  27. 27

    안드로이드 스튜디오 이미지보기에서 이미지를 표시 할 수 없습니다

  28. 28

    프로세스 페이지에서 PHP의 인덱스 페이지로 서버 측 오류 메시지 표시

  29. 29

    스프링 보안 4 / 로그인은 필터를 통과하지 않습니다.

뜨겁다태그

보관