현재 시장에서 인기 있는 권한 관리 기술 스택 조합은
ssm+shrio
SpringCloud+SpringBoot+SpringSecurity
이 조합은 자연스럽게 고유한 일치를 갖습니다. 특징: SpringBoot의 자동 주입 구성 원리로 인해 프로젝트 생성 시 SpringSecurity를 관리하는 필터 컨테이너(DelegatingFilterProxy)가 자동으로 주입되며, 이 필터가 전체 SpringSecurity의 핵심입니다. SpringSecurity의 전체 권한 인증 프로세스를 마스터하고 SpringBoot를 사용하면 자동으로 주입할 수 있습니다 ssm을 사용하여 Security를 통합하면 많은 구성 파일이 소모되고 개발이 쉽지 않으며 Security의 마이크로서비스 권한과 완벽하게 통합될 수 있습니다. 클라우드이므로 보안은 Shrio보다 더 강력하고 완벽합니다.
Security의 핵심 구성 파일
클래스는 WebSecurityConfigurerAdapterWebSecurityConfigurerAdapter를 상속받은 후 전체 보안 인증 과정에서 관련 구성에 대한 구성 방법에 중점을 둡니다. 물론 먼저 간략하게 이해해야 합니다. 구성 과정을 살펴보세요
전체 권한 인증 과정을 간략하게 살펴보면 Spring Security의 핵심은 다음 구성 항목
보안 인증 과정
1. 로그인 요청입니다
사용)
핵심 방법:
1.public
*loadUserByUsername(문자열 사용자 이름) 요청 매개변수의 사용자 이름을 통해 존재 여부를 쿼리하기 위해 데이터베이스로 이동합니다. 존재하는 경우 UserDetails에 캡슐화됩니다. 인증 프로세스는 AuthenticationManagerBuilder를 통해 UserDetail에서 확인됩니다.
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SysUser sysUser = sysUserService.getByUsername(username); if (sysUser == null) { throw new UsernameNotFoundException("用户名或密码不正确"); } // 注意匹配参数,前者是明文后者是暗纹 System.out.println("是否正确"+bCryptPasswordEncoder.matches("111111",sysUser.getPassword())); return new AccountUser(sysUser.getId(), sysUser.getUsername(), sysUser.getPassword(), getUserAuthority(sysUser.getId())); }이 검증을 통과하면 필터가 해제됩니다. 통과하지 못하면 맞춤 또는 기본 프로세서를 사용하여 처리하세요
핵심 구성 파일:
package com.markerhub.config; import com.markerhub.security.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired LoginFailureHandler loginFailureHandler; @Autowired LoginSuccessHandler loginSuccessHandler; @Autowired CaptchaFilter captchaFilter; @Autowired JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; @Autowired JwtAccessDeniedHandler jwtAccessDeniedHandler; @Autowired UserDetailServiceImpl userDetailService; @Autowired JwtLogoutSuccessHandler jwtLogoutSuccessHandler; @Bean JwtAuthenticationFilter jwtAuthenticationFilter() throws Exception { JwtAuthenticationFilter jwtAuthenticationFilter = new JwtAuthenticationFilter(authenticationManager()); return jwtAuthenticationFilter; } @Bean BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } private static final String[] URL_WHITELIST = { "/login", "/logout", "/captcha", "/favicon.ico", }; protected void configure(HttpSecurity http) throws Exception { http.cors().and().csrf().disable() // 登录配置 .formLogin() .successHandler(loginSuccessHandler) .failureHandler(loginFailureHandler) .and() .logout() .logoutSuccessHandler(jwtLogoutSuccessHandler) // 禁用session .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) // 配置拦截规则 .and() .authorizeRequests() .antMatchers(URL_WHITELIST).permitAll() .anyRequest().authenticated() // 异常处理器 .and() .exceptionHandling() .authenticationEntryPoint(jwtAuthenticationEntryPoint) .accessDeniedHandler(jwtAccessDeniedHandler) // 配置自定义的过滤器 .and() .addFilter(jwtAuthenticationFilter()) .addFilterBefore(captchaFilter, UsernamePasswordAuthenticationFilter.class) ; } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailService); } }2. 로그인 요청이 아닙니다
// 校验验证码逻辑 private void validate(HttpServletRequest httpServletRequest) { String code = httpServletRequest.getParameter("code"); String key = httpServletRequest.getParameter("token"); if (StringUtils.isBlank(code) || StringUtils.isBlank(key)) { System.out.println("验证码校验失败2"); throw new CaptchaException("验证码错误"); } System.out.println("验证码:"+redisUtil.hget(Const.CAPTCHA_KEY, key)); if (!code.equals(redisUtil.hget(Const.CAPTCHA_KEY, key))) { System.out.println("验证码校验失败3"); throw new CaptchaException("验证码错误"); } // 一次性使用 redisUtil.hdel(Const.CAPTCHA_KEY, key); }
위 내용은 SpringSecurity+Redis 인증 프로세스는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!