|
|
package com.tianbo.warehouse.security.config;
|
|
|
|
|
|
import com.netflix.discovery.converters.Auto;
|
|
|
import com.tianbo.warehouse.security.handel.MyAuthenticationAccessDeniedHandler;
|
|
|
import com.tianbo.warehouse.security.handel.MyAuthenticationFailHandler;
|
|
|
import com.tianbo.warehouse.security.handel.MyAuthenticationSuccessHandler;
|
|
|
import com.tianbo.warehouse.security.MyFilterSecurityInterceptor;
|
|
|
import com.tianbo.warehouse.security.handel.MyLogoutSuccessHandler;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.core.annotation.Order;
|
|
|
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
|
|
import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication;
|
|
|
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.core.userdetails.UserDetailsService;
|
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
|
|
|
import org.springframework.web.cors.CorsUtils;
|
|
|
|
|
|
@Configuration
|
|
|
@EnableWebSecurity
|
|
|
@EnableGlobalMethodSecurity(prePostEnabled = true)
|
|
|
@Order(1)
|
|
|
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
|
...
|
...
|
@@ -35,18 +43,36 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { |
|
|
@Autowired
|
|
|
private UserDetailsService userDetailsService;
|
|
|
|
|
|
@Autowired
|
|
|
private MyAuthenticationAccessDeniedHandler myAuthenticationAccessDeniedHandler;
|
|
|
|
|
|
@Autowired
|
|
|
private MyLogoutSuccessHandler myLogoutSuccessHandler;
|
|
|
|
|
|
@Override
|
|
|
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
|
|
//user Details Service验证
|
|
|
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 在configure(HttpSecurity http)方法中,
|
|
|
* 通过withObjectPostProcessor将刚刚创建的UrlFilterInvocationSecurityMetadataSource和UrlAccessDecisionManager注入进来。
|
|
|
* 到时候,请求都会经过刚才的过滤器(除了configure(WebSecurity web)方法忽略的请求)。
|
|
|
* 通过myFilterSecurityInterceptor关联他俩
|
|
|
* @param http
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@Override
|
|
|
protected void configure(HttpSecurity http) throws Exception {
|
|
|
http.authorizeRequests()
|
|
|
//跨域配置
|
|
|
.requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
|
|
|
//管理页面只允许管理员角色访问
|
|
|
.antMatchers("/admin","/role").authenticated()
|
|
|
//管理页面只允许管理员角色访问 //任何请求,登录后可以访问
|
|
|
.anyRequest().permitAll() //其余的不需要验证
|
|
|
//任何请求,登录后可以访问
|
|
|
//其余的不需要验证
|
|
|
.anyRequest().permitAll()
|
|
|
.and()
|
|
|
.formLogin()
|
|
|
.passwordParameter("password")
|
...
|
...
|
@@ -61,8 +87,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { |
|
|
.permitAll()
|
|
|
// .successForwardUrl("/main")
|
|
|
.and()
|
|
|
.exceptionHandling().accessDeniedHandler(myAuthenticationAccessDeniedHandler)
|
|
|
.and()
|
|
|
.logout()
|
|
|
.logoutSuccessUrl("/?logout=true")
|
|
|
.logoutSuccessHandler(myLogoutSuccessHandler)
|
|
|
.permitAll()
|
|
|
.and()
|
|
|
.rememberMe()
|
...
|
...
|
@@ -77,6 +106,6 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { |
|
|
.and()
|
|
|
.csrf().disable();
|
|
|
|
|
|
//http.addFilterBefore(myFilterSecurityInterceptor, FilterSecurityInterceptor.class).csrf().disable();
|
|
|
http.addFilterBefore(myFilterSecurityInterceptor, FilterSecurityInterceptor.class);
|
|
|
}
|
|
|
} |
...
|
...
|
|