[SPRING] Spring Security 3 - 항상 오류 302를 반환합니다.
SPRINGSpring Security 3 - 항상 오류 302를 반환합니다.
나는 Spring 4를 사용하여 간단한 애플리케이션을 만든다. 최근에 저는 스프링 시큐리티 3을 프로젝트에 추가하고 있지만 오류 코드 302를 항상 가져옵니다 (그래서 홈 페이지로 항상 리디렉션됩니다).
다음은 내 SecurityConfig입니다.
@Configuration
@EnableWebMvcSecurity
@ComponentScan(basePackages = { "com.moon.repository" })
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("hello").password("world").roles("USER");
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring().antMatchers("/resources/**", "/views/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/","/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/home")
.loginProcessingUrl("/acct/signin")
.and()
.logout()
.permitAll();
}
}
AccountController라는 컨트롤러가 있습니다.
@Controller
@RequestMapping(value = "/acct")
public class AccountController {
private final Logger logger = LoggerFactory.getLogger(AccountController.class);
@RequestMapping(value = "/signin", method = RequestMethod.POST)
public String signin(@RequestParam("username") String username,
@RequestParam("password") String password) {
logger.info("======== [username:{0}][password:{1}] ========", username, password);
if ("error@1.1".equalsIgnoreCase(username)) {
return "error";
} else {
return "demo";
}
}
}
내 WEB-INF 구조 :
WEB-INF
----views
--------home.jsp
--------demo.jsp
--------error.jsp
흐름은 다음과 같습니다.
어떤 아이디어? 나는 2 일 내내 붙어서 거의 절망에 빠지네 ...
모두 내 문제를 한번 살펴봐 줘서 고마워.
===================== 1 차 업데이트 ============= ==========
업데이트 : home.jsp의 형식
<form:form role="form" method="POST" action="acct/signin"
class="form-signin">
<div class="row">
<div class="col-lg-5">
<input name="username" size="20" type="email"
class="form-control" placeholder="Email address" required
autofocus>
<input name="password" type="password"
class="form-control" placeholder="Password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</div>
</div>
</form:form>
===================== 2 차 업데이트 ============= ==========
UserDetailsService (메모리 내 인증 사용 안함)를 구현하려고했지만 여전히 ... 같은 문제 - 오류 302
AppUserDetailsServiceImpl.java
@Component
public class AppUserDetailsServiceImpl implements UserDetailsService {
private final Logger logger = LoggerFactory.getLogger(AppUserDetailsServiceImpl.class);
@Override
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
logger.info("loadUserByUsername username=" + username);
logger.info("======== {} ========",SecurityContextHolder.getContext().getAuthentication());
if (!username.equals("hello")) {
throw new UsernameNotFoundException(username + " not found");
}
// creating dummy user details
return new UserDetails() {
private static final long serialVersionUID = 2059202961588104658L;
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public String getUsername() {
return username;
}
@Override
public String getPassword() {
return "world";
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<SimpleGrantedAuthority> auths = new java.util.ArrayList<SimpleGrantedAuthority>();
auths.add(new SimpleGrantedAuthority("USER"));
return auths;
}
};
}
로그에 다음이 표시됩니다.
[14/08/19 15:16:32:200][INFO ][com.moon.repository.AppUserDetailsServiceImpl][loadUserByUsername](24) loadUserByUsername username=hello
[14/08/19 15:16:32:200][INFO ][com.moon.repository.AppUserDetailsServiceImpl][loadUserByUsername](25) ======== org.springframework.security.authentication.UsernamePasswordAuthenticationToken@f1e4f742: Principal: com.moon.repository.AppUserDetailsServiceImpl$1@e3dc1b1; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@12afc: RemoteIpAddress: 127.0.0.1; SessionId: 023BC9A8B997ECBD826DD7C33AF55FC7; Granted Authorities: USER ========
해결법
-
==============================
1.나는 당신이 로그인 프로세스를 통해 실제로 사용자를 인증하지 않았기 때문에 Spring이 / home으로 리다이렉트하고 있다고 생각한다.
나는 당신이 로그인 프로세스를 통해 실제로 사용자를 인증하지 않았기 때문에 Spring이 / home으로 리다이렉트하고 있다고 생각한다.
InMemoryUserDetailsManagerConfigurer (inMemoryAuthentication javadoc 참고)를 사용하면 구성된 자격 증명을 통해서만 성공적으로 로그인 할 수 있습니다. 본격적인 인증 시스템을 원한다면 (UserDetailsService 메소드를 통해) Spring 보안 설정에 UserDetailsService 구현을 제공해야한다.
편집 : chialin.lin 함께 대화를 다음, 누락 된 구성을 한 번 인증 된 사용자를 리디렉션 할 수있는 봄 보안에 대한 defaultSuccessfulUrl 것으로 보인다.
-
==============================
2.새롭고 간단한 SuccessHandler를 작성하지 않으려면 필터의 successfulAuthentication 메소드를 대체하고 보안 컨텍스트에서 Authentication 오브젝트를 설정 한 후에 chain.doFilter () 메소드를 호출하십시오.
새롭고 간단한 SuccessHandler를 작성하지 않으려면 필터의 successfulAuthentication 메소드를 대체하고 보안 컨텍스트에서 Authentication 오브젝트를 설정 한 후에 chain.doFilter () 메소드를 호출하십시오.
-
==============================
3.나에게 나는 약간 다른 유즈 케이스에서 왔지만 완벽하게 작동하기 전에 '갑자기'같은 문제가 발생했다. 내 설정 Spring에서 나머지 인터페이스를 빌드하는 ExtJs 프론트 엔드. 그것은 모두 훌륭한 좋은 일한 후 갑자기 내가 HTTP 상태 302 응답 (WTH 시작 했어?)
나에게 나는 약간 다른 유즈 케이스에서 왔지만 완벽하게 작동하기 전에 '갑자기'같은 문제가 발생했다. 내 설정 Spring에서 나머지 인터페이스를 빌드하는 ExtJs 프론트 엔드. 그것은 모두 훌륭한 좋은 일한 후 갑자기 내가 HTTP 상태 302 응답 (WTH 시작 했어?)
다음 예제에 따라 코드를 구현했습니다. https://octoperf.com/blog/2018/03/08/securing-rest-api-spring-security/ SimpleUrlAuthenticationSuccessHandler 선언이 있습니다. TokenAuthenticationFilter가 NoRedirectStrategy 클래스로 구성되는 4.4 SecurityConfig를 참조하십시오. 4.1 리디렉션 전략 참조
이 NoRedirectStrategy를 AbstractAuthenticationProcessingFilter의 내 확장에 설정하지 않으면 HTTP 302 응답을 표시합니다.
from https://stackoverflow.com/questions/25357518/spring-security-3-always-return-error-302 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring jndi NamingException : 이름 [spring.liveBeansView.mbeanDomain]가이 Context 내에서 바인드되어 있지 않은 경우 (0) | 2019.04.05 |
---|---|
[SPRING] 스프링 보안 3.1으로 사용자를 프로그래밍 방식으로 로그하는 방법 (0) | 2019.04.05 |
[SPRING] 스프링 데이터 : 관리되지 않는 유형 : class java.lang.Object (0) | 2019.04.05 |
[SPRING] Spring과 DelegatingFilterProxy에 @Autowired (0) | 2019.04.05 |
[SPRING] 스프링 부트 이해 @Autowired (0) | 2019.04.05 |