回不到的未来 2018-12-21 18:30 采纳率: 0%
浏览 1420

spring oauth2 资源服务器问题

我定义了三个类

@Configuration
@EnableWebSecurity
public class BCSecurityConfig extends WebSecurityConfigurerAdapter{

    @Autowired
    private DataSource dataSource;


    @Override
    public void configure(HttpSecurity http) throws Exception {
        super.configure(http);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource);
    }

}

另外两个是认证服务器

@Configuration
@EnableAuthorizationServer
public class BCAuthorizationServerConfig {

}

和资源服务器

@Configuration
@EnableResourceServer
public class BCResourceServerConfig extends ResourceServerConfigurerAdapter{

    @Override
    public void configure(HttpSecurity http) throws Exception {
        //表单登录 方式
        http.formLogin().and()
                .authorizeRequests()
                .antMatchers("/api/**")
                .authenticated()
                .antMatchers("/oauth/token").permitAll()
                .and()
                .csrf().disable();
    }

}

有一个问题就是,当你配置了资源服务器的时候访问需要认证的链接返回的是
图片说明
这是没有问题的,但是我想实现的是当你在没有认证的情况下访问其他的链接的时候自动跳转到登录页,也就是我想让BCResourceServerConfig资源服务器不处理的链接交给我配置的BCSecurityConfig这个类处理?请问怎么实现呢,请不吝赐教不胜感激!!!

我的最终目的是它既能提供安全的网页服务(登陆验证)!又能够通过oauth提供token

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 12:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,你需要修改你的BCResourceServerConfig来使其只允许特定的URL路径。你可以使用ResourceRequestMatcherResourceHttpRequestHandler类来指定这些URL。

    首先,确保你已经在application.properties中设置了正确的数据库连接信息:

    jdbc.datasource.url=jdbc:mysql://localhost:3306/school?useSSL=false&serverTimezone=UTC
    jdbc.datasource.username=root
    jdbc.datasource.password=<your-password>
    

    然后,在你的BCResourceServerConfig中添加以下代码:

    @Override
    protected void configure(ResourceRequestMatcher requestMatcher, ResourceHttpRequestHandler httpRequestHandler) {
        // 添加自定义的请求匹配器和处理器
        if (!requestMatcher.matches("/*")) {
            httpRequestHandler.setRedirectStrategy(NoOpRedirectStrategy.getInstance());
        }
    }
    
    // 在这里添加你的其他配置
    

    这将仅允许那些匹配/api/**的URL路径。如果你希望更细地控制哪些URL被拦截,你可以添加更多的ResourceRequestMatcherResourceHttpRequestHandler实例,并且为每个匹配规则设置一个不同的处理器。

    这样,当用户尝试访问/api/**以外的任何URL时,他们将被重定向到login.html页面进行身份验证。

    评论

报告相同问题?