Spring Security 我无法在服务器端Sping Boot 应用程序上实现JWT标记

xa9qqrwz  于 2022-11-24  发布在  Spring
关注(0)|答案(1)|浏览(174)

我已经创建了一个MVCSpring Boot 应用程序,Map到一个mySQL表,配置安全性,允许管理员访问学生列表和用户能够访问科目列表。到目前为止,一切都很好。
现在我想使用JWT标记。问题是我关注的每个视频都使用带有postman和simple @RestControllers的JWT,但没有MVC。
当我尝试访问1个列表后,启动服务器,自定义登录页面来播放,我输入详细信息和一切工作正常。
但是,我该如何实现令牌呢?我创建了一个名为“/authenticate”的非MVC端点,它会返回一个令牌,使用post man可以很好地工作。但是,当我尝试使用自定义登录页面登录时,我该如何在应用程序中返回令牌呢?我在这里没有得到任何帮助。感谢您的帮助!

gg0vcinb

gg0vcinb1#

下面是使用postman进行身份验证的端点:

@PostMapping ("/authenticate")
public ResponseEntity<?> createAuthenticationToken(@RequestBody AuthenticationRequest authenticationRequest) throws Exception {
    try {
        authenticationManager.authenticate(
                new UsernamePasswordAuthenticationToken(
                        authenticationRequest.getUsername(), authenticationRequest.getPassword()));

    } catch (BadCredentialsException e)
    {
        throw new Exception("Incorrect UserName or Password!",e);
    }

    UserDetails userDetails =
            customUserDetailsService.loadUserByUsername(authenticationRequest.getUsername());
    String jwt = jwtUtil.generateToken(userDetails);

    return ResponseEntity.ok(new AuthenticationResponse(jwt));

}

以下是我的安全配置:http. csrf文件().禁用().授权请求(). ant匹配器(“/"、"/注册/"、"/注销”、"/登录”、"/验证”)。允许全部(). ant匹配器(“/helloAdmin”).具有角色(“管理员”).antMatchers(“/helloUser”).具有角色(“用户”).antMatchers(“/students/”).具有角色(“管理员”).antMatchers(“/subjects/**”).具有任何角色(“/login”).和().登录页面(“/login”).和().注销().注销成功URL(“/login?注销”);

http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

            http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);

相关问题