Безопасность глобального метода в Spring Загрузка - программирование
Подтвердить что ты не робот

Безопасность глобального метода в Spring Загрузка

У меня возникают некоторые проблемы при попытке включить глобальную защиту метода в приложении загрузки Spring. Более или менее у меня есть эта конфигурация:

@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). Я думаю, это потому, что безопасность метода сконфигурированный в контексте корневого приложения, а не в сервлет. Однако я не могу найти способ установить это через конфигурацию Java, вместо использования файла web.xml. Любые идеи?

Update:

Как указано в комментариях, методы должны быть общедоступными для проксирования.

4b9b3361

Ответ 1

Методы контроллера должны быть общедоступными для проксирования для @Secured. Просто это нужно исправить.

Ответ 2

В XML вам нужно будет определить второй global-method-security в файле servlet-context.xml. Это связано с тем, что существуют два контекста: корневой контекст и контекст сети и безопасность необходимо настраивать отдельно.

В конфигурации Java попробуйте создать отдельный класс веб-конфигурации и пометьте его @EnableWebMvc:

@Configuration
@EnableWebMvc
@EnableGlobalMethodSecurity(securedEnabled = true, proxyTargetClass = true)
public class WebConfig {
    ...
}