如何将 angular 9 登录页面连接到 spring 启动应用程序?
How to connect angular 9 login page to spring boot app?
我已经在第一个用户微服务中成功实现了 spring 安全性,这里是
配置代码:
@EnableWebSecurity
public class MSSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/users/UserById/*")
.antMatchers("/users/Activate/**/");
}
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
angular 服务的完整语法是:
return this.http.get<UserObj>(`http://localhost:9023/users/Authenticate?username=aaa&password=bbb`
用户详情服务:
@Service
public class MSUserDetailsService implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
User user = userRepository.getUser(userName);
if (user != null) {
return new MSUserDetails(user);
}
throw new UsernameNotFoundException("Not found: " + userName);
}
}
这是处理来自 angular 的服务调用的控制器:
@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@RestController
@RequestMapping("/users")
@Slf4j
public class UserController {
@GetMapping("/Authenticate")
public User authenticatie(@RequestParam("username") String username, @RequestParam("password") String password) {
return userService.authenticatie(username, password);
}
我需要知道如何将此身份验证连接到 spring 安全性以便下次用户发送不同的 url 时它已经被验证了吗?
您设置 url 的方式就好像 spring 引导程序也处理应用程序的前端部分。可能你从教程中获得了这段代码,如果没问题,但并不意味着用于与不同的前端集成。
即使应用程序在同一台服务器上运行,也可能端口会出现问题,我不确定您是否可以过来。
您在评论中告诉我您为登录创建了一个 RestController,这很棒,因为这个想法是朝着正确的解决方案发展的。该端点必须负责验证用户(最终针对数据库,我看到您当前使用的是静态值)和 return 某种要存储在您的 angular 中的令牌(例如 jwt)。
想法如下,angular 登录页面必须调用在 spring-boot 和 return 某种 ot 令牌中创建为 @RestController 的登录端点。 Angular 保存在 cookie 或本地存储中提供的令牌。然后 angular 将其用于针对 spring boot.
的请求
然后 spring 需要身份验证的引导端点必须在网络安全中配置才能这样做。阅读如何在 spring 引导中创建用于验证的过滤器并实施一个。
额外注意,您可能还需要允许 cors 从 angular 到 spring 引导。
我已经在第一个用户微服务中成功实现了 spring 安全性,这里是 配置代码:
@EnableWebSecurity
public class MSSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/users/UserById/*")
.antMatchers("/users/Activate/**/");
}
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
angular 服务的完整语法是:
return this.http.get<UserObj>(`http://localhost:9023/users/Authenticate?username=aaa&password=bbb`
用户详情服务:
@Service
public class MSUserDetailsService implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
User user = userRepository.getUser(userName);
if (user != null) {
return new MSUserDetails(user);
}
throw new UsernameNotFoundException("Not found: " + userName);
}
}
这是处理来自 angular 的服务调用的控制器:
@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@RestController
@RequestMapping("/users")
@Slf4j
public class UserController {
@GetMapping("/Authenticate")
public User authenticatie(@RequestParam("username") String username, @RequestParam("password") String password) {
return userService.authenticatie(username, password);
}
我需要知道如何将此身份验证连接到 spring 安全性以便下次用户发送不同的 url 时它已经被验证了吗?
您设置 url 的方式就好像 spring 引导程序也处理应用程序的前端部分。可能你从教程中获得了这段代码,如果没问题,但并不意味着用于与不同的前端集成。
即使应用程序在同一台服务器上运行,也可能端口会出现问题,我不确定您是否可以过来。
您在评论中告诉我您为登录创建了一个 RestController,这很棒,因为这个想法是朝着正确的解决方案发展的。该端点必须负责验证用户(最终针对数据库,我看到您当前使用的是静态值)和 return 某种要存储在您的 angular 中的令牌(例如 jwt)。
想法如下,angular 登录页面必须调用在 spring-boot 和 return 某种 ot 令牌中创建为 @RestController 的登录端点。 Angular 保存在 cookie 或本地存储中提供的令牌。然后 angular 将其用于针对 spring boot.
的请求然后 spring 需要身份验证的引导端点必须在网络安全中配置才能这样做。阅读如何在 spring 引导中创建用于验证的过滤器并实施一个。
额外注意,您可能还需要允许 cors 从 angular 到 spring 引导。