Mock @AuthenticationPrincipal argument
up vote
1
down vote
favorite
I have spring-security-oauth2 application which is a ResourceServer. We have a custom PrincipalExtractor class that builds the custom Principal object. This custom Principal object do not extend Principal or UserDetails
class CustomUser
//some custom fields
class CustomPrincipalExtractor implements PrincipalExtractor
@Override
public CustomUser extractPrincipal(Map<String, Object> map)
return new CustomUser(map);
class SomeController
@GetMapping
public ResponseEntity(@AuthenticationPrincipal CustomUser user)
//able to get user object
The above code works fine. Now I want to test the controller, but not able to pass CustomUser instance.
@SpringBootTest
@AutoConfigureMockMvc
public class SomeControllerTest
@Autowired
private MockMvc mockMvc;
@Test
public void test()
mockMvc.perform(get(...).principal(CANNOT pass CustomUser as it does not implement Principal))
I looked at some other solutions which asks to have custom HandlerMethodArgumentResolver but not sure how configure autoconfigured MockMvc
java spring spring-boot spring-security spring-security-oauth2
add a comment |
up vote
1
down vote
favorite
I have spring-security-oauth2 application which is a ResourceServer. We have a custom PrincipalExtractor class that builds the custom Principal object. This custom Principal object do not extend Principal or UserDetails
class CustomUser
//some custom fields
class CustomPrincipalExtractor implements PrincipalExtractor
@Override
public CustomUser extractPrincipal(Map<String, Object> map)
return new CustomUser(map);
class SomeController
@GetMapping
public ResponseEntity(@AuthenticationPrincipal CustomUser user)
//able to get user object
The above code works fine. Now I want to test the controller, but not able to pass CustomUser instance.
@SpringBootTest
@AutoConfigureMockMvc
public class SomeControllerTest
@Autowired
private MockMvc mockMvc;
@Test
public void test()
mockMvc.perform(get(...).principal(CANNOT pass CustomUser as it does not implement Principal))
I looked at some other solutions which asks to have custom HandlerMethodArgumentResolver but not sure how configure autoconfigured MockMvc
java spring spring-boot spring-security spring-security-oauth2
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I have spring-security-oauth2 application which is a ResourceServer. We have a custom PrincipalExtractor class that builds the custom Principal object. This custom Principal object do not extend Principal or UserDetails
class CustomUser
//some custom fields
class CustomPrincipalExtractor implements PrincipalExtractor
@Override
public CustomUser extractPrincipal(Map<String, Object> map)
return new CustomUser(map);
class SomeController
@GetMapping
public ResponseEntity(@AuthenticationPrincipal CustomUser user)
//able to get user object
The above code works fine. Now I want to test the controller, but not able to pass CustomUser instance.
@SpringBootTest
@AutoConfigureMockMvc
public class SomeControllerTest
@Autowired
private MockMvc mockMvc;
@Test
public void test()
mockMvc.perform(get(...).principal(CANNOT pass CustomUser as it does not implement Principal))
I looked at some other solutions which asks to have custom HandlerMethodArgumentResolver but not sure how configure autoconfigured MockMvc
java spring spring-boot spring-security spring-security-oauth2
I have spring-security-oauth2 application which is a ResourceServer. We have a custom PrincipalExtractor class that builds the custom Principal object. This custom Principal object do not extend Principal or UserDetails
class CustomUser
//some custom fields
class CustomPrincipalExtractor implements PrincipalExtractor
@Override
public CustomUser extractPrincipal(Map<String, Object> map)
return new CustomUser(map);
class SomeController
@GetMapping
public ResponseEntity(@AuthenticationPrincipal CustomUser user)
//able to get user object
The above code works fine. Now I want to test the controller, but not able to pass CustomUser instance.
@SpringBootTest
@AutoConfigureMockMvc
public class SomeControllerTest
@Autowired
private MockMvc mockMvc;
@Test
public void test()
mockMvc.perform(get(...).principal(CANNOT pass CustomUser as it does not implement Principal))
I looked at some other solutions which asks to have custom HandlerMethodArgumentResolver but not sure how configure autoconfigured MockMvc
java spring spring-boot spring-security spring-security-oauth2
java spring spring-boot spring-security spring-security-oauth2
edited Nov 9 at 8:33
asked Sep 5 at 8:27
sidgate
6,25153268
6,25153268
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
I had to implement some workaround to get this work.
Created a mock Filter that sets the Authentication object in SecurityContext. Following is the code
public class MockSpringSecurityFilter implements Filter
@Override
public void init(FilterConfig filterConfig)
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
SecurityContextHolder.getContext()
.setAuthentication((Authentication) ((HttpServletRequest) req).getUserPrincipal());
chain.doFilter(req, res);
@Override
public void destroy()
SecurityContextHolder.clearContext();
Within the test
@Before
public void setup()
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity(new MockSpringSecurityFilter()))
.build();
@Test
public void test()
mockMvc.perform(get(...)
.principal(new UsernamePasswordAuthenticationToken(new CustomUser(), null))...
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
I had to implement some workaround to get this work.
Created a mock Filter that sets the Authentication object in SecurityContext. Following is the code
public class MockSpringSecurityFilter implements Filter
@Override
public void init(FilterConfig filterConfig)
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
SecurityContextHolder.getContext()
.setAuthentication((Authentication) ((HttpServletRequest) req).getUserPrincipal());
chain.doFilter(req, res);
@Override
public void destroy()
SecurityContextHolder.clearContext();
Within the test
@Before
public void setup()
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity(new MockSpringSecurityFilter()))
.build();
@Test
public void test()
mockMvc.perform(get(...)
.principal(new UsernamePasswordAuthenticationToken(new CustomUser(), null))...
add a comment |
up vote
0
down vote
accepted
I had to implement some workaround to get this work.
Created a mock Filter that sets the Authentication object in SecurityContext. Following is the code
public class MockSpringSecurityFilter implements Filter
@Override
public void init(FilterConfig filterConfig)
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
SecurityContextHolder.getContext()
.setAuthentication((Authentication) ((HttpServletRequest) req).getUserPrincipal());
chain.doFilter(req, res);
@Override
public void destroy()
SecurityContextHolder.clearContext();
Within the test
@Before
public void setup()
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity(new MockSpringSecurityFilter()))
.build();
@Test
public void test()
mockMvc.perform(get(...)
.principal(new UsernamePasswordAuthenticationToken(new CustomUser(), null))...
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
I had to implement some workaround to get this work.
Created a mock Filter that sets the Authentication object in SecurityContext. Following is the code
public class MockSpringSecurityFilter implements Filter
@Override
public void init(FilterConfig filterConfig)
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
SecurityContextHolder.getContext()
.setAuthentication((Authentication) ((HttpServletRequest) req).getUserPrincipal());
chain.doFilter(req, res);
@Override
public void destroy()
SecurityContextHolder.clearContext();
Within the test
@Before
public void setup()
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity(new MockSpringSecurityFilter()))
.build();
@Test
public void test()
mockMvc.perform(get(...)
.principal(new UsernamePasswordAuthenticationToken(new CustomUser(), null))...
I had to implement some workaround to get this work.
Created a mock Filter that sets the Authentication object in SecurityContext. Following is the code
public class MockSpringSecurityFilter implements Filter
@Override
public void init(FilterConfig filterConfig)
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
SecurityContextHolder.getContext()
.setAuthentication((Authentication) ((HttpServletRequest) req).getUserPrincipal());
chain.doFilter(req, res);
@Override
public void destroy()
SecurityContextHolder.clearContext();
Within the test
@Before
public void setup()
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity(new MockSpringSecurityFilter()))
.build();
@Test
public void test()
mockMvc.perform(get(...)
.principal(new UsernamePasswordAuthenticationToken(new CustomUser(), null))...
answered Oct 25 at 5:38
sidgate
6,25153268
6,25153268
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52180555%2fmock-authenticationprincipal-argument%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown