Bonjour a tous, je suis en train de faire des tests intégrés pour une application, je dois tester les contrôleurs qui sont sécurité par spring-security-oauth2.
Mon app n'est pas sur Spring boot (ca s'est un gros problème car tout les exemples que je vois utilise String boot)
J'ai comme exemple Baeldung\spring-security-oauth(https://github.com/Baeldung/spring-security-oauth.git) qui utilise spring boot
Donc si vous avez un exemple qui n'utilise pas spring boot. Ca serait pas de refus.
voici mon code
j'ai un 401 mon probleme est que je dois passer par une cette configuration . SI je me fie a l'example de Baeldung
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContextIT.xml" }) @WebAppConfiguration @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class }) @DatabaseSetup("import.sql") public abstract class OAuthMvcTest { @Resource private WebApplicationContext webApplicationContext; public MockMvc mockMvc; @Autowired @Qualifier("mysqlDataSource") private DataSource dataSource; @Autowired ClientDetailsServiceConfigurer clients; private static final String CLIENT_ID = "CLIENT_ID"; private static final String CLIENT_SECRET = "CLIENT_SECRET"; private static final String GRANT_TYPE = "secret"; private static final String CONTENT_TYPE = "application/json;charset=UTF-8"; private static final String EMAIL = "myName@gmail.com"; private static final String NAME = "myName"; @Autowired private FilterChainProxy springSecurityFilterChain; public String absoluteFilePath = "D:/src/test/resources/json/"; @Before public void setUp() throws Exception { try { MockitoAnnotations.initMocks(this); this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext) .addFilter(springSecurityFilterChain).build(); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } } protected String obtainAccessToken(String username, String password) throws Exception { JacksonJsonParser jsonParser = null; String resultString = null; try { final MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); params.add("grant_type", "password"); params.add("client_id", CLIENT_ID); params.add("username", username); params.add("password", password); // @formatter:off ResultActions result = mockMvc .perform(post("/oauth/token").params(params).with(httpBasic(CLIENT_ID, CLIENT_SECRET)) .accept(CONTENT_TYPE)) .andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)); // @formatter:on resultString = result.andReturn().getResponse().getContentAsString(); jsonParser = new JacksonJsonParser(); } catch (Exception e) { e.printStackTrace(); } return jsonParser.parseMap(resultString).get("access_token").toString(); } }
l'example Baeldung mais avec Spring boot
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package com.baeldung.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private BCryptPasswordEncoder passwordEncoder; @Autowired public void globalUserDetails(final AuthenticationManagerBuilder auth) throws Exception { // @formatter:off auth.inMemoryAuthentication() .withUser("john").password(passwordEncoder.encode("123")).roles("USER").and() .withUser("tom").password(passwordEncoder.encode("111")).roles("ADMIN").and() .withUser("user1").password(passwordEncoder.encode("pass")).roles("USER").and() .withUser("admin").password(passwordEncoder.encode("nimda")).roles("ADMIN"); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(final HttpSecurity http) throws Exception { // @formatter:off http.authorizeRequests().antMatchers("/login").permitAll() .antMatchers("/oauth/token/revokeById/**").permitAll() .antMatchers("/tokens/**").permitAll() .anyRequest().authenticated() .and().formLogin().permitAll() .and().csrf().disable(); // @formatter:on } }
moi j'ai deja un SecurityConfiguration dans mon src que je peux pas touché. Comment ajoute ma configure auth.inMemoryAuthentication() pour faire passevoici SecurityConfiguration
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mockMvc .perform(post("/oauth/token")merci d avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) public class SecurityConfiguration extends WebSecurityConfigurerAdapter { private final AuthenticationManagerBuilder authenticationManagerBuilder; private final UserDetailsService userDetailsService; public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService) { this.authenticationManagerBuilder = authenticationManagerBuilder; this.userDetailsService = userDetailsService; } @PostConstruct public void init() { try { authenticationManagerBuilder .userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } catch (Exception e) { throw new BeanInitializationException("Security configuration failed", e); } } @Bean public Http401UnauthorizedEntryPoint http401UnauthorizedEntryPoint() { return new Http401UnauthorizedEntryPoint(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } //TODO Remove "/push/** @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .antMatchers(HttpMethod.OPTIONS, "/**") .antMatchers("/app/**/*.{js,html}") .antMatchers("/api/**/files/**/bytes") .antMatchers("/api/**/users/forgotPassword") .antMatchers("/api/**/users/reset/password/**") .antMatchers("/push/**"); } @Override public void configure(HttpSecurity http) throws Exception { http .httpBasic().realmName("Oauth2Application") .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .requestMatchers().antMatchers("/oauth/authorize") .and() .authorizeRequests() .antMatchers("/oauth/authorize").authenticated(); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Bean public SecurityEvaluationContextExtension securityEvaluationContextExtension() { return new SecurityEvaluationContextExtension(); } }
Partager