일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 추후정리
- querydsl
- EC2
- docker명령어
- 메세지수정
- ubuntu
- subquery
- application.yml
- foreignkey
- 검색
- 테스트메소드
- 참조키
- ㅔㄴ션
- appspec
- MySQL
- 포트
- 커밋메세지수정
- 서브쿼리
- 컨테이너실행
- 예약
- 테스트
- 외부키
- 메소드명
- AuthenticationEntryPoint
- 네이티브쿼리
- WeNews
- Query
- 2 > /dev/null
- appspec.yml
- 적용우선순위
Archives
- Today
- Total
제뉴어리의 모든것
Spring Security 적용시 주의사항.. 본문
- 에러 상황
기본 로그인폼이 아닌 로그인폼에서 가입시킨
id(username) 와 password를 입력하고 submit 버튼을 눌렀지만
뭔가 새로고침만 된거같은 느낌으로 페이지가 그대로였다...
콘솔창에서도 엣지의 개발자모드에서도 아무런 에러가 발생되지 않았다.
그나마 크롬에서 submit을 하면 아래의 url로 다시 request를 하였다..
도대체 무슨일인가.. (/member/login 은 커스텀 로그인페이지 url이다)
http://localhost:8080/member/login?error
알고보니.. 유저의 entity에서 UserDetails 를 implements 구현하여
Override 해준 메소드를 제대로 정의 안해줘서 그렇다.. (무조건 구현해야하는 추상메소드여서 그냥 내비뒀는데 문제의 원인이였다..)
그래서 결국 정의된 Entity는 다음과 같다.
package com.january.springsecurity.entity;
import lombok.*;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Setter
@ToString
public class Member implements UserDetails {
@Id
@Column(length = 10, nullable = false)
private String id;
@Column(length = 15, nullable = false)
private String email;
@Column(length = 100, nullable = false)
private String password;
@Column(length = 100, nullable = false)
private String auth;
public String getId() {
return id;
}
public String getEmail() {
return email;
}
public String getAuth() {
return auth;
}
@Override
public String getPassword() {
return this.password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
HashSet<GrantedAuthority> authSet = new HashSet<>();
String[] auths = auth.split(",");
for(String a : auths)
{
authSet.add(new SimpleGrantedAuthority(a));
}
return authSet;
}
@Override
public String getUsername() {
return this.id;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
- Override 한 각 메소드의 의미
User 엔티티는 UserDetails를 상속받아서 구현합니다. UserDetails에서 필수로 구현해야 하는 메소드는 아래와 같습니다.
메소드 이름 | 설명 |
getAuthorities() | 사용자의 권한을 콜렉션 형태로 반환 (클래스 자료형은 GrantedAuthority를 구현해야함) |
getUsername() | 사용자의 id를 반환 (id는 unique한 값이여야함) |
getPassword() | 사용자의 password를 반환 |
isAccountNonExpired() | 계정 만료 여부 반환 (true = 만료되지 않음을 의미) |
isAccountNonLocked() | 계정 잠금 여부 반환 (true = 잠금되지 않음을 의미) |
isCredentialsNonExpired() | 패스워드 만료 여부 반환 (true = 만료되지 않음을 의미) |
isEnabled() | 계정 사용 가능 여부 반환 (true = 사용 가능을 의미) |
- 주의사항
Entity에 @Getter나 @Data를 써서
위 메소드들과 헷갈리는 경우가 없도록한다..
'Spring Boot > Spring Security' 카테고리의 다른 글
Filter 등록시 순서 유의 사항 (0) | 2022.09.27 |
---|---|
Spring Security와 Thymeleaf 기능을 사용하는 HTML 에서 사용시 주의사항 (1) | 2022.09.23 |
spring security 중복 로그인 방지 (0) | 2021.03.30 |
[Spring Security] 현재 로그인한 사용자 정보 가져오기 (0) | 2021.02.27 |
html 태그에 sec 속성 넣어서 인증 (Authenticate) 여부에 따라 출력하기 (0) | 2021.02.27 |