如何将angular 9登录页面连接到spring boot应用程序?

idv4meu8  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(356)

我已经在第一个用户微服务中成功实现了Spring Security ,以下是配置代码:

@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 service的完整语法为:

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 security,以便下次用户发送不同的url时,它已经是authincate了?

vptzau2j

vptzau2j1#

设置URL的方式就像spring引导也处理应用程序的前端部分一样。可能您是从一个教程中获得这段代码的,该教程虽然很好,但并不打算用于与不同前端的集成。
即使应用程序在同一台服务器上运行,端口也可能是一个问题,我不确定您是否可以过来。
你在评论中告诉我,你是一个restcontroller登录,这是伟大的,因为这个想法是朝着正确的解决方案。该端点必须负责验证用户(最终针对db,我看到您当前使用的是静态值),并返回某种令牌以存储在您的数据库中(例如jwt)。
其思想如下,angular登录页面必须调用在spring boot中创建为@restcontroller的登录端点,并返回某种类型的ot令牌。angular保存cookie或本地存储中提供的令牌。然后angular将其用于针对spring boot的请求。
然后,必须在websecurity中配置需要身份验证的spring引导的端点才能这样做。阅读如何在spring boot中创建验证过滤器并实现一个过滤器。
另外请注意,您可能还需要允许cors从Angular 引导到Spring引导。

相关问题