본문 바로가기

분류 전체보기

(308)
스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증 필터 : UsernamePasswordAuthenticationFilter 스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증 필터 : UsernamePasswordAuthenticationFilter 인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다. 로그인 폼을 통해서 요청일 들어왔을때 인증과 인가가 어떻게 동작하는지 설명합니다. UsernamePasswordAuthenticationFilter라는 필터가 수행됩니다. 이후 AntPathRequestMatcher(/login) 를 수행하며 인자로 들어오는 경로가 맞는지 확인합니다. 만약 아니라면 다음 필터로 넘어갑니다. 스프링 3부터는 requestMatchers가 그 역할을 수행합니다. 로그인 폼으로부터 userna..
백준 4358 생태학 (파이썬) https://www.acmicpc.net/problem/4358 4358번: 생태학 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어 www.acmicpc.net 문제 풀이 dictionary를 알고 있다면 쉽게 풀리는 문제이다. 입력값으로 주어지는 나무들에 대해서 dictionary에 이미 있는지 검사하고 만약 있다면 해당 나무의 값을 +1하고 없다면 dictionary에 값을 넣으면서 기본값을 1로 잡아주면 된다. 풀이도 간단하고 시간복잡도 역시 높지 않으며 문제풀이의 로직 역시 다른 사람들과 동일했다. 그러나 시간초과가 발목을 잡았다. 조금..
백준 14620 꽃길 (파이썬) https://www.acmicpc.net/problem/14620 14620번: 꽃길 2017년 4월 5일 식목일을 맞이한 진아는 나무를 심는 대신 하이테크관 앞 화단에 꽃을 심어 등교할 때 마다 꽃길을 걷고 싶었다. 진아가 가진 꽃의 씨앗은 꽃을 심고나면 정확히 1년후에 꽃이 피므 www.acmicpc.net 풀이 이 문제는 파이썬의 itertools를 사용해서 combinations를 통해서 푸는 방법과 DFS로 푸는 방법이 있다. 코드 #=================== 조합으로 푸는 방법 =================== # import itertools # feild = [] # answer = int(10e9) # d = [(-1, 0), (1, 0), (0, 1), (0, -1)] # ..
스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증 인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다. @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // 강의 예제 http .authorizeHttpRequests((authz) -> authz .anyRequest().authenticated() ) .formLogin(fromLogin -> fromLogin //.loginPage("/loginPage") .defaultSuccessUrl("/") .fail..
스프링 시큐리티 기본 API 및 Filter 이해 - 사용자 정의 보안 기능 구현 인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다. 가장 상위에 SecurityConfig라는 보안 설정 인터페이스가 있고 해당 인터페이스를 상속받은 WebSecurityConfigureAdaptor라는 클래스가 있다 그리고 해당 클래스에 속한 configure를 @Override해서 사용자가 원하는 보안 수준을 설정할 수 있다. 예제 코드 문제점 위의 코드는 Spring Boot 3.xx부터 deprecated되어서 동작하지 않는다. 대신 다음과 같이 설정을 진행한다. @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityF..
스프링 시큐리티 기본 API 및 Filter 이해 - 프로젝트 구성 및 의존성 추가 인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다. 01. 인증 API- 스프링 시큐리티 의존성 추가하기 강의에서는 pom.xml에 추가하였지만 나는 build.gradle에 추가하였다. //Spring Boot Security implementation 'org.springframework.boot:spring-boot-starter-security' 스프링 시큐리티의 의존성을 추가하게 되면 다음과 같은 일이 발생된다. 서버가 실행되면서(톰캣서버) 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어 진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다. 모든 요청은 인증이 ..
파이썬 모듈에 속한 함수, 변수 출력하기 배경 코딩 테스트를 할 때 IDE를 사용하지 못하기에 자동완성을 사용할 수 없다. 그렇기에 dir함수를 사용해서 인자로 들어가는 모듈이나 클래스가 가지고 있는 속성들을 전부 출력시켜 확인하고 사용할수있는 방법이 있어 따로 남기고자 한다. 코드 import math def abc(): for data in iter(dir(math)): print(data) abc() 다음과 같은 코드를 출력할 경우 math에 속한 함수들의 이름을 출력할 수 있다.
백준 2671 잠수함식별(파이썬) 문제 코드 import re def confirm(pattern): return bool(re.fullmatch('(100+1+|01)+', pattern)) def sol(): answer = confirm(input()) if answer: print("SUBMARINE") else: print("NOISE") sol() 풀이 처음에는 입력값을 하나씩 풀어서 제공하려고 하였으나 제출하는 중 실패가 나와 검색을 해보았고 정규식 모듈(Regular Expression 줄여서 re)가 있는 걸을 알게 되었다. 해당 문제는 re 모듈을 사용하면 쉽게 해결이 가능한 문제였다. 이후 re모듈에 대해서 익숙해질 필요가 있을듯 하다.
스프링 - 카프카 MessageConversionException 오류 해결법 현상 카프카에 있는 데이터를 서버로 가져와 객체로 다시 매핑하는 과정에서 다음과 오류가 발생한다. Caused by: org.springframework.messaging.converter.MessageConversionException: failed to resolve class name. Class not found [um.uamserver.domain.dto.AdsbData] 원인 데이터를 보내는 송신측에서 카프카로 jsonSerializer를 통해 객체를 직렬화해서 보낼때 패키지 정보까지 헤더에 같이 보내고 데이터를 받는 수신 측에서는 카프카에서 jsonDeserializer를 통해 패키지 정보까지 같이 역직렬화를 한다. 이때 만약 서로 송수신측의 데이터 패키지가 다르다면 오류가 발생한다. 고치는..
백준 1212 8진수 2진수 (파이썬) https://www.acmicpc.net/problem/1212 1212번: 8진수 2진수 첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다. www.acmicpc.net 문제 풀이 이 문제는 파이썬의 bin, int함수에 대해서 알고 있으면 쉽게 해결되는 문제이다. bin(문자열)을 넣으면 2진수로 반환해주고 int는 첫번째 인자에는 문자열을 넣어주고 두번째 인자에는 첫번째 인자의 진수를 적어준다. (기본값은 10진수) 코드 def solution(x): ans = int(x, 8) print(bin(ans)[2:]) solution(input())