URL limitato all'avvio a molla
-
21-12-2019 - |
Domanda
Buona giornata, Ho un'applicazione di primavera-boot 1.1.4.release, che utilizza la sicurezza a molle inclusa come dipendenze come:
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.security:spring-security-web:4.0.0.M1")
compile("org.springframework.security:spring-security-config:4.0.0.M1")
compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity3:2.1.1.RELEASE')
.
Ho due tipi di ruoli: "Utente" e "Admin".Quest'ultimo ha tutto il primo, ma anche accedere a una schermata di amministrazione.Nella mia pagina ThyMuleaf, mostravo solo quel collegamento agli utenti con un ruolo di amministratore via, che funziona bene:
<li sec:authorize="hasRole('ADMIN')">
<i class="fa fa-link"></i><a th:href="@{/admin}">
Administer User</a>
</li>
.
Tuttavia, se digito manualmente nell'URL su quella pagina (http://localhost:9001/admin
), tutti i ruoli possono accedervi.Pensavo di aver controllato questo tramite la classe di configurazione della sicurezza:
@Configuration
@EnableWebMvcSecurity
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService customUserDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers( "/" ).permitAll()
.antMatchers("/admin/").hasRole("ADMIN") <== also tried .antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers( "/resources/**" ).permitAll()
.antMatchers( "/css/**" ).permitAll()
.antMatchers( "/libs/**" ).permitAll();
http
.formLogin().failureUrl( "/login?error" )
.defaultSuccessUrl( "/" )
.loginPage( "/login" )
.permitAll()
.and()
.logout().logoutRequestMatcher( new AntPathRequestMatcher( "/logout" ) ).logoutSuccessUrl( "/" )
.permitAll();
http
.sessionManagement()
.maximumSessions( 1 )
.expiredUrl( "/login?expired" )
.maxSessionsPreventsLogin( true )
.and()
.sessionCreationPolicy( SessionCreationPolicy.IF_REQUIRED )
.invalidSessionUrl( "/" );
http
.authorizeRequests().anyRequest().authenticated();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
PasswordEncoder encoder = new BCryptPasswordEncoder();
auth.userDetailsService( customUserDetailsService ).passwordEncoder( encoder );
}
.
}
C'è qualcosa che manca o non corretto nella mia configurazione?
Aggiornamento : La soluzione che ho usato, in base alla risposta di Dave era quella di utilizzare le seguenti tre linee:
.antMatchers( "/admin**" ).hasAuthority("ADMIN" )
.antMatchers( "/admin/" ).hasAuthority( "ADMIN" )
.antMatchers( "/admin/**" ).hasAuthority( "ADMIN" )
.
Questo renderà un errore 403 sul browser.Alla fine proverò a farlo reindirizzare a una pagina di errore oa "/ '.
Soluzione
Tu solo protetto esplicitamente "/ admin /" (con una barra finale).Immagino che tu debba essere più preciso di quello se stai visitando "/ admin" (senza una barra finale).