Что такое защита Spring
Безопасность Spring полностью связана с аутентификацией и авторизацией, в вашем случае вы пропускаете аутентификацию.В вашей конфигурации безопасности нет конфигурации аутентификации.Чего вам не хватает, так это фильтра аутентификации для вашей весенней безопасности.Spring security предоставляет фильтр аутентификации по умолчанию UsernamePasswordAuthenticationFilter
, который можно настроить с помощью .formLogin()
.Вы можете использовать предоставленную по умолчанию или вы можете определить свой собственный пользовательский фильтр аутентификации (реализация UsernamePasswordAuthenticationFilter
).
После успешной аутентификации Spring Security предоставит полномочия для аутентифицированного пользователя.Если аутентификация настроена правильно, ниже конфигурация отвечает за аутентификацию и предоставление полномочий
auth.inMemoryAuthentication().withUser("sahil").password("123")
.roles("ADMIN","USER");
Аутентифицированным пользователям каждый запрос будет проходить через фильтр FilterSecurityInterceptor
, и он будет проверять полномочия, предоставленные для аутентифицированного пользователя с авторизацией, настроенной для ресурсовкак указано в приведенном ниже коде.
.antMatchers("/welcome","/inventory/**","/sales/**").access("hasRole('USER')")
Вы пропустили все это, не настроив фильтр аутентификации.
Теперь для упрощения использования use.formLogin () в вашей конфигурации http.
@Override
protected void configure(final HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.antMatchers("/welcome","/inventory/**","/sales/**").access("hasRole('USER')")
.and().exceptionHandling()
.accessDeniedPage("/403")
.and().formLogin()
.and().logout()
.logoutSuccessUrl("/login?logout=true")
.invalidateHttpSession(true)
.and()
.csrf()
.disable();
}
.formLogin()
без какой-либо конфигурации предоставляет страницу входа по умолчанию с параметрами формы по умолчанию для имени пользователя и пароля. И после аутентификации она перенаправляет на "/"
Если вы хотите предоставить свою пользовательскую страницу входа, используйте следующую конфигурацию.
.and().formLogin()
.loginPage("/login")
.usernameParameter("email").passwordParameter("password")
.defaultSuccessUrl("/app/user/dashboard")
.failureUrl("/login?error=true")
.loginPage("")
- URL-адрес вашей пользовательской страницы входа
.usernameParameter("").passwordParameter("")
- Параметры настраиваемой формы входа в систему
.defaultSuccessUrl("")
- URL-адрес страницы после успешной аутентификации
.failureUrl("")
- Страницаurl после сбоя аутентификации
Примечание: Вы не должны использовать метод POST "/ login" в вашем контроллере, даже если вы пишете, он не будет достигнут из цепочки фильтров безопасности Spring.Поскольку ваша конфигурация была неправильной раньше, она достигала раньше!Теперь вы удалите их из своего контроллера и используйте обычный подход, как указано выше.