Spring保护了网络应用和休息应用

时间:2015-03-10 21:02:52

标签: java spring rest spring-mvc spring-security

我阅读了很多关于如何配置弹簧安全性的手册,但仍然坚持配置。 所以我想配置休息呼叫和其他http呼叫。据我所知,我可以创建像/ server / **的网址 - 用于Web应用程序和/ rest / ** - 用于休息应用程序。对于任何web应用程序网址的调用,我想创建一个登录页面(当用户未经过身份验证时),但对于其他应用程序,我想要触发未经授权的代码。

我通过扩展WebSecurityConfigurerAdapter

使用spring注释来实现
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().authorizeRequests()
            .antMatchers("/").access("hasRole('ROLE_USER')")
            .antMatchers("/server/*").access("hasRole('ROLE_USER')")
            .and()
            .formLogin().loginPage("/login").permitAll().failureUrl("/login?error")
            .usernameParameter("username")
            .passwordParameter("password")
            .and()
            .exceptionHandling()
            .accessDeniedPage("/accessDenied");
}

对于服务器它工作正常,但如果我尝试添加/休息时,我尝试呼叫/休息/ [某事](在浏览器中),它总是转发到/登录页面。 我不明白为什么,这让我心碎。 感谢任何有用的回复。

2 个答案:

答案 0 :(得分:2)

你有这个:

.antMatchers("/").access("hasRole('ROLE_USER')")
            .antMatchers("/server/*").access("hasRole('ROLE_USER')")
            .and()
            .formLogin()

表示/访问需要ROLE_ACCESS并进行身份验证,直接指向formLogin

您需要多个身份验证配置。

请参阅http://docs.spring.io/autorepo/docs/spring-security/4.0.0.CI-SNAPSHOT/reference/htmlsingle/

在其中一个中你需要这样的东西

http
        .antMatcher("/rest/**")
        .exceptionHandling().authenticationEntryPoint(new AccessDenyEntryPoint()).and()                
        .authorizeRequests().antMatchers("/spring/**").denyAll();

答案 1 :(得分:0)

如果您不想验证其他网址,则必须再添加一个.antMatchers("/rest/*").permitAll()