목록JWT (19)
JAN's History

JwtAuthorizationFilter extends BasicAuthenticationFilter 생성// 시큐리티가 filter를 가지고 있는데 그 필터중에 BasicAuthenticationFilter라는 것이 있음// 권한이나 인증이 필요한 특정 주소를 요청했을 때 위 필터를 무조건 타게 되어 있음// 만약에 권한이나 인증이 필요한 주소가 아니라면 이 필터를 사용하지 않음public class JwtAuthorizationFilter extends BasicAuthenticationFilter { public JwtAuthorizationFilter(AuthenticationManager authenticationManager) { super(authenticationManag..

RestApiController로그인 기능을 구현하기 전 회원가입을 먼저 진행해보자 @PostMapping("join") public String join(@RequestBody User user) { user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); user.setRoles("ROLE_USER"); userRepository.save(user); return "회원가입완료"; }SecurityConfig에 BCryptPasswordEncoder Bean으로 등록 @Bean public BCryptPasswordEncoder bCryptPasswordEnco..

JWT를 공부하던 도중 Authentication 객체를 반환하는 이유가 권한 관리를 위해서라는 말이 이해가 가지 않아 정리해보기로 결심! 일단 저의 코드 구조를 대략적으로 적어보겠습니다.User @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String username; private String password; private String roles; //USER, ADMIN //하나의 유저당 role이 2개 이상일 경우를 대비해서! public List getRoleList(){ if(this.roles.length() > 0){ ..

토큰을 검증하기 위한 필터 만들기필터를 이용하여 토큰 검증을 진행했을 때, 유효하지 않다면 해당 컨트롤러로 더이상 접근하지 못하도록 할 수 있습니다.public class MyFilter3 implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse res = (Http..

Spring Security Filter Chain필터를 등록하기 전, 스프링에서 제공하는 Filter Chain에 대해 꼭 알아두기를 바랍니다!이전 글에 정리해뒀으니 읽어보고 오시는 것을 추천드려요 :)Filter 생성하기public class MyFilter1 implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Filter 1"); filterChain.doFilte..

JWT을 위한 Filter를 구현하기 전, Spring SecurityFilterChain를 제대로 짚고 넘어가는 것이 좋을 것 같아 힘이 닿는데까지 공부해보기로 했습니다! Spring에서 JWT 필터 구현의 필요성?JWT를 하는데 왜 필터를 구현해야하는지 묻는 분들을 위해 이 부분도 짚고 넘어가려고해요! (제가그랬기 때문..)JWT(Json Web Token)은 HTTP프로토콜을 따라 stateless한 방식으로 인증을 처리합니다. 그렇다보니, 로그인 상태를 유지하기 위해 나온 것이 바로 JWT토큰이었는데요! 서버가 세션 상태를 유지할 필요 없이 클라이언트가 요청 시마다 JWT를 포함해 인증을 수행하며 인증과 인가를 처리하고 있었습니다.이를 위해 커스텀 필터를 구현해야하는 이유는 다음과 같아요. 1. ..

Session은 동일 도메인에서만 가능하다만약 동일한 도메인에서의 요청이 아니라면, 쿠키가 날라가지 않는다(서버에서 쿠키가 거부하기 때문)그렇다면 javascript에서 Ajax로 헤더에 쿠키를 강제로 담아 보낼 수 있는데, 서버에서는 HTTP Only 설정을 통해 HTTP 요청이 아닌 javascript 요청이 들어오면 거부되는 설정을 한다.HTTP only = false로 풀어주면, 외부에서 javascript로 강제로 쿠키에 세션 ID를 담아 보내는 등의 악질적인 장난을 많이 치기 때문에 true로 설정하는 편이 좋다.Authorization서버로 요청을 보낼 때, 요청 헤더에 Authorizaion : 을 담아서 보냅니다.type에는 여러가지가 있지만 Basic, Bearer를 알아보겠습니다.B..
Maven com.auth0 java-jwt 3.16.0application.ymlserver: port: 8080 servlet: context-path: / encoding: charset: UTF-8 enabled: true force: truespring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/{your_database}?serverTimezone=Asia/Seoul username: {your_username} password: {your_password} jpa: hibernate: ..