我有一个Spring Boot后端和一个基于Angular 5的前端。 我想使用Spring Security进行身份验证和授权。 我希望在Angular(http://localhost:4200/login)中自定义登录表单。 我想在数据库中包含用户及其密码和角色。 我不明白如何告诉Spring登录页面位于不同的域中(在前端)。 我应该在RestController类中定义一个/ login,还是默认情况下在Spring Security中有一个/ login允许用户进行身份验证? 请帮忙。
package smart.syndic.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
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.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.inMemoryAuthentication()
.withUser("admin").password("1234")
.roles("ADMIN");
}
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder()
{
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/login/**", "/administrateurs/**").permitAll()
.and()
.authorizeRequests().antMatchers(HttpMethod.GET, "/users").permitAll()
.and()
.exceptionHandling().accessDeniedPage("/forbidden")
.and()
.authorizeRequests().anyRequest().authenticated();
}
}
答案 0 :(得分:0)
如果您选择将后端和前端拆分为2个不同的服务器(例如localhost:8080和localhost:4200),那么假设后端对前端一无所知,这将是一个更好的选择。在这种方法中,当请求未经授权时,后端应返回状态401(like here),您的前端应处理将用户重定向到/ login页面的情况。
为了在春季执行此操作,您可以像在注释示例中一样进行操作。