我在嘗試啓用Spring Boot應用程序中的全局方法安全性時遇到了一些問題。 或多或少我有這個配置:Spring Boot中的全局方法安全性
@ComponentScan
@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
public class Main extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
SpringApplication app = new SpringApplication(Main.class);
app.setShowBanner(false);
ApplicationContext context = app.run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Main.class);
}
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, proxyTargetClass = true)
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
...
}
@Override
protected void configure(HttpSecurity http) throws Exception {
...
}
}
@Controller
public class SampleController {
@RequestMapping("/api/hello")
@ResponseBody
String hello() {
return "Hello!";
}
@Secured(SecurityGrant.WRITE_PROJECT)
@RequestMapping("/api/bye")
@ResponseBody
String bye() {
return "Bye!";
}
}
的@Secure標註在服務工作正常,但不是在控制器,所以當我讀到這裏(http://docs.spring.io/spring-security/site/faq/faq.html#faq-method-security-in-web-context)我想是因爲方法的安全性僅在配置根應用程序上下文,不在servlet中。 但是,我找不到通過Java配置來設置它的方式,而不是使用web.xml文件。 任何想法?
更新:
正如在評論中指出,方法應該是公開的被代理。
不要控制器方法需要公開才能代理'@ Secured'嗎? –
就是這樣!你拯救了我的一天。 –