Spring Security 의 formLogin 로그 인 인증 모드 를 자세히 설명 합 니 다.


1.formLogin 의 응용 장면
이 칼럼 의 이전 글 에 서 는 이미 Spring Security 의 Http Basic 모드 를 소 개 했 는데,이 모드 는 비교적 간단 하 다.Http 를 가 진 Header 를 통 해 간단 한 로그 인 검증 을 했 을 뿐 맞 춤 형 로그 인 페이지 가 없어 사용 장면 이 좁다.
완전한 응용 시스템 에 대해 로그 인 검증 과 관련 된 페이지 는 고도 로 맞 춤 형 이 고 아름 다 우 며 다양한 로그 인 방식 을 제공 합 니 다.이것 은 Spring Security 가 저희 가 맞 춤 형 로그 인 페이지 를 지원 해 야 합 니 다.즉,본 고 에서 소개 한 formLogin 모델 로그 인 인증 모델 입 니 다.
준비 작업
  • Spring Boot 의 웹 애플 리 케 이 션 을 새로 만 들 고 Spring Security Starter 를 도입 합 니 다.
  • login.html 로그 인 페이지 를 준비 합 니 다.페이지 내용 은 매우 간단 합 니 다.from 폼,사용자 이름과 비밀번호 입력 상자,제출 버튼
  • 첫 페이지 index.html 를 준비 하고 로그 인 에 성공 한 후에 index.html 첫 페이지
  • 에 들 어가 야 합 니 다.
  • 첫 페이지 에서 syslog(로그 관리),sysuer(사용자 관리),biz 1(업무 1),biz 2(업무 2)네 페이지 의 하이퍼텍스트 링크 옵션 을 볼 수 있 습 니 다.controller 제어 층 을 통 해 페이지 를 넘 기 고 해당 페이지 에 상징적 인 문 자 를 쓰 면 됩 니 다.구체 적 인 업 무 를 쓰 지 않 아 도 됩 니 다.
  • 수요
  • 저 희 는 biz 1(업무 1),biz 2(업무 2)일반적인 조작 사용자 user 가
  • 을 방문 할 수 있 기 를 바 랍 니 다.
  • 저 희 는 관리자 가 syslog(로그 관리)와 sysser(사용자 관리)를 포함 한 모든 자원
  • 에 접근 할 수 있 기 를 바 랍 니 다.

  • 이상 은 바로 본 고 에서 formLogin 모델 이 진행 해 야 할 준비 작업 과 수 요 를 소개 하 는 것 입 니 다.다음은 그 중의 핵심 적 인 로그 인 검증 논 리 를 실현 하고 준비 작업 은 매우 간단 합 니 다.스스로 실현 하 십시오.(새 spring boot 응용 프로그램 입 니 다.로그 인 페이지,첫 페이지,네 개의 업무 페이지 는 모두 매우 간단 한 html 로 쓰 면 됩 니 다.실제 업무 와 스타일 을 쓰 지 않 아 도 됩 니 다.)
    설명
    formLogin 모드 의 세 가지 요소:
  • 로그 인 검증 논리
  • 자원 접근 제어 규칙,예 를 들 어 자원 권한,역할 권한
  • 사용자 정보
  • 일반적으로 권한 인증 프레임 워 크 를 사용 하 는 업무 시스템 로그 인 검증 논 리 는 고정 적 이 고 자원 액세스 제어 규칙 과 사용자 정 보 는 데이터베이스 나 다른 저장 매체 에서 유연 하 게 불 러 옵 니 다.그러나 본 논문 의 모든 사용자,자원,권한 정 보 는 코드 설정 이 죽 었 습 니 다.formLogin 인증 모델 을 소개 하고 데이터 베이스 에서 권한 인증 관련 정 보 를 어떻게 불 러 오 는 지 RBAC 권한 모델 과 결합 하여 글 을 쓸 것 입 니 다.
    3.formLogin 모델 기초 설정 실현
    우선,우 리 는 WebSecurity ConfigurerAdapter 를 계승 하여 configure(HttpSecurity http)방법 을 다시 써 야 합 니 다.이 방법 은 로그 인 검증 논 리 를 설정 하 는 데 사 용 됩 니 다.다음 코드 의 주석 정 보 를 주의 깊 게 보 세 요.
    
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable() //    csrf    ,          
          .formLogin()
            .loginPage("/login.html")//      ,             ,     
            .loginProcessingUrl("/login")//    form action   ,            
            .usernameParameter("uname")///    form       input name ,        username
            .passwordParameter("pword")//form      input name ,        password
            .defaultSuccessUrl("/index")//              
            .and()
          .authorizeRequests()
            .antMatchers("/login.html","/login").permitAll()//                    
            .antMatchers("/biz1").hasAnyAuthority("biz1") //          、             ID
            .antMatchers("/biz2").hasAnyAuthority("biz2")
            .antMatchers("/syslog").hasAnyAuthority("syslog")
            .antMatchers("/sysuser").hasAnyAuthority("sysuser")
            .anyRequest().authenticated();
      }
    }
    위의 코드 는 두 부분 으로 나 뉜 다.
    첫 번 째 부분 은 formLogin 설정 단계 로 로그 인 검증 논리 와 관련 된 정 보 를 설정 하 는 데 사 용 됩 니 다.예 를 들 어 로그 인 페이지,로그 인 성공 페이지,로그 인 요청 처리 경로 등.
    두 번 째 부분 은 authorizeRequests 설정 단 으로 자원 의 접근 권한 을 설정 합 니 다.예 를 들 어 로그 인 페이지 를 개발 하 는 permitAll 은 방문 을 개방 합 니 다.'/biz 1'(업무 한 페이지 자원)은 자원 ID 가'biz 1'인 사용자 가 방문 할 수 있 습 니 다.
    이때,우 리 는 브 라 우 저 를 통 해 접근 할 수 있 습 니 다.접근 권한 이 없 는 자원 을 마음대로 테스트 하면 login.html 페이지 로 이동 합 니 다.

    4.자원 방문 제한 을 실현 하 는 수요
    위의 글 에서 저 희 는 로그 인 인증 과 자원 접근 권한 규칙 을 설정 하 였 습 니 다.저 희 는 아직 구체 적 인 사용자 가 없습니다.다음은 구체 적 인 사용 자 를 설정 하 겠 습 니 다.WebSecurity ConfigurerAdapter 를 다시 쓰 는 configure(AuthenticationManager Builder auth)방법
    
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
      auth.inMemoryAuthentication()
        .withUser("user").password(passwordEncoder().encode("123456")).authorities("biz1","biz2")
        .and()
        .passwordEncoder(passwordEncoder());//  BCrypt  
    }
    @Bean
    public PasswordEncoder passwordEncoder(){
      return new BCryptPasswordEncoder();
    }
    inMemoryAuthentication                      。
    withUser("user")    user
    password(passwordEncoder().encode("123456"))        123456
    authorities("biz1","biz2")   user      ID biz1(   ) biz2(   )     
    이렇게 해서 우 리 는 글 에서 제시 한 일반 사용자 가 biz 1(업무 1)과 biz 2(업무 2)자원 만 방문 할 수 있 는 수 요 를 실현 했다.그러면 관리자 사용 자 는 모든 자원 의 설정 방식 에 접근 할 수 있 습 니 다.그 렇 죠?같은 레 시 피,같은 방식 으로 직접 시도 해 보 세 요!
    5.정적 자원 접근
    우리 의 실제 개발 에서 로그 인 페이지 login.html 와 제어 층 Controller 로그 인 인증'/login'은 무조건 개방 되 어야 합 니 다.그 밖 에 css,js 파일 과 같은 정적 자원 도 검증 권한 이 필요 하지 않 습 니 다.접근 권한 도 열 어야 합 니 다.다음은 실현 방법 입 니 다.웹 보안 ConfigurerAdapter 류 의 configure(WebSecurity 웹)방법 을 다시 쓰 는 것 입 니 다.
    
      @Override
      public void configure(WebSecurity web) {
        //              
        web.ignoring().antMatchers("/config/**", "/css/**", "/fonts/**", "/img/**", "/js/**");
      }
    총결산
    위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 Spring Security 의 formLogin 로그 인 인증 모델 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
    만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

    좋은 웹페이지 즐겨찾기