I have configured Spring Security for my REST API (with HeaderHttpSessionStrategy).
My 'WebSecurityConfigurerAdapter' implementation looks as below.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/**").permitAll()
.and()
.requestCache()
.requestCache(new NullRequestCache())
.and()
.httpBasic()
;
}
Now, how can I configure 'HttpSecurity' object so that the basic authentication is only possible with a specific endpoint.
For example:
/user/login : Basic Authentication should only be possible on this end point.After sucessfull authentication x-auth-token header is returned.
/user/create : Client should not be able to authenticate on this endpoint.Should only return 401.Can only be accessed using the 'x-auth-token' created using /user/login endpoint.
Run the app using: ./gradlew bootRun . Navigate to the home endpoint, which is open: http://localhost:8080 . And the restricted endpoint, which requires authentication: http://localhost:8080/restricted . When Spring's login form appears, don't forget you can use the default credentials.
You can define multiple WebSecurityConfigurerAdapter
s. One of higher priority which has a request matcher to restrict applicability to /user/login
like: http.requestMatcher(new AntPathRequestMatcher("/user/login"))
, and another one as a catch-all for the rest. You can omit the requestMatcher
to make the http definition unrestricted.
You must always define restrictions from specific to generic. In your case it should be specific URL checks to generic security checks.
You should finally apply more generic restriction like you mentioned on URL, /user/** to be authenticated and having some roles.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/user/login, /user/signup, /logout").permitAll()
.antMatchers("/user/**").hasRole("ADMIN")
.and()
.requestCache()
.requestCache(new NullRequestCache())
.and()
.httpBasic();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With