package com.monkeylessey.framework.config; import com.monkeylessey.framework.security.filter.MyUsernamePasswordFilter; import com.monkeylessey.framework.security.handler.XpAuthenticationFailureHandler; import com.monkeylessey.framework.security.handler.XpAuthenticationSuccessHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @ConditionalOnProperty(prefix = "xp-start.security", name = "session", havingValue = "true") public class SessionSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private XpAuthenticationFailureHandler failureHandler; @Autowired private XpAuthenticationSuccessHandler successHandler; @Bean public PasswordEncoder getPasswordEncoder() { return NoOpPasswordEncoder.getInstance(); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Bean public MyUsernamePasswordFilter myUsernamePasswordFilter() throws Exception { MyUsernamePasswordFilter myUsernamePasswordFilter = new MyUsernamePasswordFilter(); // 设置用户名参数 myUsernamePasswordFilter.setUsernameParameter("username"); // 设置密码参数 myUsernamePasswordFilter.setPasswordParameter("password"); // 设置设置请求方式必须为post myUsernamePasswordFilter.setPostOnly(true); // 设置认证的请求 myUsernamePasswordFilter.setFilterProcessesUrl("/login"); // 设置认证manager, 使用security默认的即可 myUsernamePasswordFilter.setAuthenticationManager(authenticationManagerBean()); // 设置认证成功处理 myUsernamePasswordFilter.setAuthenticationSuccessHandler(successHandler); // 设置认证失败处理 myUsernamePasswordFilter.setAuthenticationFailureHandler(failureHandler); return myUsernamePasswordFilter; } @Override protected void configure(HttpSecurity http) throws Exception { http.formLogin(); http.authorizeRequests().anyRequest().authenticated(); http.csrf().disable(); // 使用我们自定义的过滤器替换UsernamePasswordAuthenticationFilter http.addFilterAt(myUsernamePasswordFilter(), UsernamePasswordAuthenticationFilter.class); } }