使用SpringSecurity保护你的Eureka.

因为注册中心基本上都是自己的应用在使用,应用不是特别多,可以写死,如果应用很多,那么就写入数据库把

pom

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>
WebSecurityConfigurerAdapter ,注意为了可以使用 http://pc:123456@localhost:8000/eureka/ 这种方式登录,所以必须是httpBasic,如果是form方式,不能使用url格式登录
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${users.admin.name}")
    private String admin_name;
    @Value("${users.admin.password}")
    private String admin_password;
    @Value("${users.admin.roles}")
    private String [] admin_roles;

    @Value("${users.pc.name}")
    private String pc_name;
    @Value("${users.pc.password}")
    private String pc_password;
    @Value("${users.pc.roles}")
    private String [] pc_roles;

    @Value("${users.app.name}")
    private String app_name;
    @Value("${users.app.password}")
    private String app_password;
    @Value("${users.app.roles}")
    private String [] app_roles;

    @Value("${users.apiuser.name}")
    private String apiuser_name;
    @Value("${users.apiuser.password}")
    private String apiuser_password;
    @Value("${users.apiuser.roles}")
    private String [] apiuser_roles;

    @Value("${users.zuul.name}")
    private String zuul_name;
    @Value("${users.zuul.password}")
    private String zuul_password;
    @Value("${users.zuul-router.roles}")
    private String [] zuul_roles;



    @Override
    public void configure(WebSecurity web) throws Exception {
    //这里忽略app调用的接口服务,让接口服务的Oauth去验证
        web.ignoring().antMatchers("/app-server/api/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
        http.authorizeRequests().anyRequest().fullyAuthenticated().antMatchers("/app-server/pc/**").hasRole("PCSERVER");
//        .antMatchers("/app-server/api/**").hasRole("APIUSER");
        http.csrf().disable();
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }




    @Override
    protected void configure(AuthenticationManagerBuilder auth)throws Exception{
        auth.inMemoryAuthentication().withUser(admin_name).password(admin_password).roles(admin_roles)
                .and().withUser(pc_name).password(pc_password).roles(pc_roles)//PC 服务
                .and().withUser(app_name).password(app_password).roles(app_roles)//APP 服务
                .and().withUser(zuul_name).password(zuul_password).roles(zuul_roles) //路由
                .and().withUser(apiuser_name).password(apiuser_password).roles(apiuser_roles);//接口调用者
    }

}

 

application.yml

server:
  port: 8000
  max-threads: 2000
  max-connections: 2000

eureka:
  instance:
    hostname: localhost
    appname: eureka
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

users:
  admin:
    name: admin
    password: admin
    roles: ADMIN,PC,APIUSER
  pc:
    name: pc
    password: 123456
    roles: PCSERVER
  app:
    name: app
    password: 123456
    roles: app
  apiuser:
    name: apiuser
    password: 123456
    roles: APIUSER
  zuul:
    name: zuul
    password: 123456
    roles: ZUUL

其他服务连接eureka

http://pc:123456@localhost:8000/eureka/

 

posted @ 2017-08-23 16:22  181282945  阅读(4633)  评论(0编辑  收藏  举报