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);
|
}
|
}
|