我阅读了很多关于如何配置弹簧安全性的手册,但仍然坚持配置。 所以我想配置休息呼叫和其他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");
}
对于服务器它工作正常,但如果我尝试添加/休息时,我尝试呼叫/休息/ [某事](在浏览器中),它总是转发到/登录页面。 我不明白为什么,这让我心碎。 感谢任何有用的回复。
答案 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()
。