侧边栏壁纸
  • 累计撰写 25 篇文章
  • 累计创建 27 个标签
  • 累计收到 43 条评论

目 录CONTENT

文章目录

spring-cloud 集成nacos(四) 整合oauth2的一些问题

junior
2022-12-02 / 0 评论 / 1 点赞 / 673 阅读 / 1,651 字

前言

本文使用的代码可在gitee仓库自行克隆。

问题一

授权单独作为一个模块,资源服务器和 zuul 网关整合。通过网关去获取授权码时网关会将请求转发到授权服务器但是 session 不互通导致登录不成功。目前最好还是将 zuul网关、授权服务器、资源服务器整合到一块,避免 session 不互通。

问题二

zuul网关、授权服务器、资源服务器作为一个整体时,需要注意 WebSecurityConfig 和 ResourceServerConfiguration 里配置的拦截器执行顺序。由于后者的拦截器优先级高导致相同的 url 时前者的拦截器不生效,所以建议 ResourceServerConfiguration 里配置的拦截器只处理项目中自己写的 api 接口,WebSecurityConfig 里处理其他接口,如下所示:

public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
    ...
    
     @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .formLogin().and()      //  放开登录页
                .requestMatchers()
                    .antMatchers("/api/**")     //  只拦截/api的请求,其他都交给webSecurity处理
                    .and()
                .authorizeRequests()    //  处理拦截到的请求
                    .antMatchers("/api/order/getGoods").hasAnyAuthority("user")
                    .antMatchers("/api/user/getUser").hasAnyAuthority("user")
                    .antMatchers("/api/user/buy").hasAnyAuthority("user")
                    .antMatchers("/api/order/order").hasAnyAuthority("user")
                    .antMatchers("/api/order/create").hasAnyAuthority("user")
                    .antMatchers("/api/order/order").hasAnyAuthority("admin")
                    .anyRequest()//其他请求
                    .authenticated();    //需要身份认证;
    }
    
    ...
}

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  ...
  
      @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .formLogin()    //使用登录界面登录
                .and()
                .requestMatchers()
                    .anyRequest()   // 拦截任何请求
                    .and()
                .authorizeRequests()    //  对拦截的请求进行处理
                    .antMatchers("/login", "/oauth/**").permitAll()
                    .anyRequest().authenticated()     // 除了上面的url都需要权限认证
                    .and()
                    .csrf().disable() //打开的csrf保护
//                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)//禁用session 默认授权页面将失效
        ;
    }
    
    ...

}

1

评论区