본문 바로가기

dev/Spring-security9

[Spring] Spring-security를 JSP에서 사용하기 JSP 에서 스프링 시큐리티와 관련된 정보를 출력하거나 사용하려면 JSP 상단에 스프링-시큐리티 관련 태그 라이브러리를 선언하고, 태그와 principal 이라는 이름의 속성을 사용합니다. Spring-security 에서 자주 사용되는 표현식 hasRole([role]) hasAuthority([authority]) 해당 권한이 있으면 True hasAnyRole([role,role2]) hasAnyAuthority([authority]) 여러 권한들 중에서 하나라도 해당 권한이 있으면 True principal 현재 사용자 정보를 의미 permitAll 모든 사용자에게 허용 denyAll 모든 사용자에게 거부 isAnonmous() - 익명의 사용자의 경우(로그인을 하지 않은 경우도 해당) True .. 2022. 8. 20.
[Spring] Spring security - ApplicationFilterchain, DelegatingFilterProxy 스택을 보면 FilterChainProxy -> do.Filter() -> (이동)해당필터.doFilter() -> 요청 ~~ 이동 쭉쭉 이어간다 이때 FilterChainProxy 클래스에서 nextFilter.doFilter() 가 실행되는데 이때 nextFilter는 additionalFilters에 담겨있는 N개의 필터중 currentPostition 순번째의 필터를 의미한다. 즉 currentPosition 이 addtitionalFilters.size() 와 동일할때 까지 등록되어 있는 SecurityFilterChain 이 다돌아갈떄 까지 진행된다고 생각하면된다. UsernamePasswordAuthenticationFilter.doFilter() 를 요청했는데 UsernamePassword.. 2022. 8. 20.
[Spring] Filter Filter - Filters perform filtering in the doFilter method. Every Filter has access to a FilterConfig object from which it can obtain its initialization parameters, and a reference to the ServletContext which it can use, for example, to load resources needed for filtering tasks. OncePerRequestFilter - Filter base class that aims to guarantee a single execution per request dispatch, on any servlet.. 2022. 8. 20.
[Spring] Spring Security 대략적인 흐름 설정 후 access 등급이 있는 경우 Login화면으로 변경되며 로그인 성공시 바로 INFO : com.secu.web.SecurityController - ONLY MEMBER 호출 접속시도-> 기본 Login 화면 -> SecurityController + error-page="" 설정으로 권한이 없는 아이디로 접속한 경우 바로 INFO : com.secu.web.CommonController - access Denied 출력됨 + error-page 대신 ref="" 하여 AccessDeinedHandler 추가해줄경우 접속시도->Login->권한이 없는 경우 CustomAccessDeniedHandler (Redirect)-> CommonController(Redirect한곳) =========.. 2022. 8. 6.
[Spring] spring security 중간정리 1. spring security는 spring security 를 사용하기 위해서는 를 추가 해줘야한다. 2. spring security 는 filter로 등록해줘야 한다. 3. spring security 설정을 위하여 security-context.xml 을 생성 한 후 contextConfigLocation에 등록해줘야 한다. >> security-context.xml 에서 크게 2개의 태그가 있는데. 1) - : 어느 Pattern(URI)에 어떤 Access(권한)을 걸지 설정한다. 즉 Pattern에 적힌 URI로 접속시에 Access에 적시된 권한이 없을경우 Spring security 기본 Login 화면 또는 개인이 설정한 로그인 화면으로 이동된다. - : login-page 설정을 .. 2022. 8. 6.
[Spring] UserDetailsService 활용 JDBC를 이용하는 방식도 DB를 처리해서 편리하게 사용할 수 있기는 하지만 사용자의 여러 정보들 중에 제한적인 내용만을 이용한다는 단점이 있다. username, password, authority, enabled 컬럼을 이용하여 user-by-username-query / authorities-by0username-query 을 통해서 사용자의 권한을 확인 했는데. 이외의 다양한 이름이나, 이메일 등의 자세한 정보를 이용할경우에는 충분하지 못한다는 단점이 있다. 이러한 문제점을 해결하기 위해서는 직접 UserDetailsService를 구현하는 것이 좋은데 흔히 Custom UserDetailsService라고 합니다. 이를 이용하면 사용자가 원하는 객체를 인증과 권한 체크에 사용할수 있기 떄문입니다.. 2022. 8. 5.
[Spring ] JDBC를 이용한 인증/권한 처리 지금까지의 Spring security의 인증과 권한은 지정해 놓은몇개의 아이디와 패스워드를 통해서 접근이가능했다. 이제부터는 JDBC를 이용하는 방식을 한번 알아보자 스프링 시큐리티에서는 사용자를 확인하는 '인증(Authentication)' 과 권한등을 부여하는 '인과(Authorization)'으로 나누어 볼 수 있습니다. Authenticatoin Manager suers-by-username-query, authorities-by-username-query 를 통해서 인증을 받은 후 .CustomLoginSuccessHandler 으로 이동한 후 마지막으로 Handler에서 지정한 곳으로 이동하는것으로 볼수 있다. DB의 컬럼명과 security-context.xml, JSP 속성명 을 일치 시.. 2022. 8. 4.
[Spring] Spring security - custom login page 태그를 보면 action이 /login을 통해서 이루어 지며, Post 방식으로 데이터를 전달해야 합니다 또한 input 태그의 name 속성은기본적으로 username, password 속성을 사용합니다. 또한 마지막으로 hidden에서 ${_csrf.parameterName}, ${_csrf.token} 을 확인할 수 있는데 페이지 속성보기를 통해 보면 아래와 같이 나타나는것을 확인 할 수 있습니다. 위에서 작한성 action이나 form 태그의 속성들은 기본 값으로 변경할 수 있습니다.. security-context.xml을 통해서 =============================================================================== CSRF(Cross-si.. 2022. 8. 2.
[Spring] spring security (setting, authentication 처리, 403처리) Spring Security pom.xml Dependency add security-context.xml 생성 [ servlet-context, root-context 와 별개로 따로 설정한다 ] Spring security 설정이 MVC에서 사용되기위햐서는 필터를 이용해서 스프링 동작에 관여 하도록 설정합니다. web.xml 설정 1. security-context.xml 을 읽을수 있도록 지정해주고 2. Filter 를 지정해 줍니다. 3. security-context.xml에서 를 생성해줍니다. 해당 태그가 있어야 security-context,xml이 실행됩니다. 시큐리티가필요한 URI 설계 1. /board/all : 로그인을 하지 않은 사용자도 접근 가능한 URI 2. /board/writ.. 2022. 7. 30.