I’m trying to make an authorization & authentication using Jwt token. And I have some issues:
- My signup works fine, user can signup in system, info abount user sucessfully goes to PostgreSQL(username, password, etc)
- My signin fails with that error
So, here is my SecurityController & SecurityConfigurator & TokenFilter & JwtCore
<code>import com.raddan.OldVK.auth.JwtCore;
import com.raddan.OldVK.auth.SigninRequest;
import com.raddan.OldVK.auth.SignupRequest;
import com.raddan.OldVK.entity.User;
import com.raddan.OldVK.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/auth")
public class SecurityController {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
private AuthenticationManager authenticationManager;
private JwtCore jwtCore;
@Autowired
public void setJwtCore(JwtCore jwtCore) {
this.jwtCore = jwtCore;
}
@Autowired
public void setAuthenticationManager(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Autowired
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
@PostMapping("/signup")
public ResponseEntity<?> signup(@RequestBody SignupRequest signupRequest) {
if (userRepository.existsByUsername(signupRequest.getUsername())) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Choose different username!");
}
if (userRepository.existsByEmail(signupRequest.getEmail())) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Choose different email!");
}
User user = new User();
user.setUsername(signupRequest.getUsername());
user.setEmail(signupRequest.getEmail());
user.setPassword(passwordEncoder.encode(signupRequest.getPassword()));
user.setAvatar(signupRequest.getAvatar());
user.setRole(signupRequest.getRole());
userRepository.save(user);
return ResponseEntity.ok("User successfully registered!");
}
@PostMapping("/signin")
public ResponseEntity<?> signin(@RequestBody SigninRequest signinRequest) {
Authentication authentication = null;
try {
authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(signinRequest.getUsername(), signinRequest.getPassword()));
} catch (BadCredentialsException e) {
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
}
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtCore.generateToken(authentication);
return ResponseEntity.ok(jwt);
}
}
</code>
<code>import com.raddan.OldVK.auth.JwtCore;
import com.raddan.OldVK.auth.SigninRequest;
import com.raddan.OldVK.auth.SignupRequest;
import com.raddan.OldVK.entity.User;
import com.raddan.OldVK.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/auth")
public class SecurityController {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
private AuthenticationManager authenticationManager;
private JwtCore jwtCore;
@Autowired
public void setJwtCore(JwtCore jwtCore) {
this.jwtCore = jwtCore;
}
@Autowired
public void setAuthenticationManager(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Autowired
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
@PostMapping("/signup")
public ResponseEntity<?> signup(@RequestBody SignupRequest signupRequest) {
if (userRepository.existsByUsername(signupRequest.getUsername())) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Choose different username!");
}
if (userRepository.existsByEmail(signupRequest.getEmail())) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Choose different email!");
}
User user = new User();
user.setUsername(signupRequest.getUsername());
user.setEmail(signupRequest.getEmail());
user.setPassword(passwordEncoder.encode(signupRequest.getPassword()));
user.setAvatar(signupRequest.getAvatar());
user.setRole(signupRequest.getRole());
userRepository.save(user);
return ResponseEntity.ok("User successfully registered!");
}
@PostMapping("/signin")
public ResponseEntity<?> signin(@RequestBody SigninRequest signinRequest) {
Authentication authentication = null;
try {
authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(signinRequest.getUsername(), signinRequest.getPassword()));
} catch (BadCredentialsException e) {
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
}
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtCore.generateToken(authentication);
return ResponseEntity.ok(jwt);
}
}
</code>
import com.raddan.OldVK.auth.JwtCore;
import com.raddan.OldVK.auth.SigninRequest;
import com.raddan.OldVK.auth.SignupRequest;
import com.raddan.OldVK.entity.User;
import com.raddan.OldVK.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/auth")
public class SecurityController {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
private AuthenticationManager authenticationManager;
private JwtCore jwtCore;
@Autowired
public void setJwtCore(JwtCore jwtCore) {
this.jwtCore = jwtCore;
}
@Autowired
public void setAuthenticationManager(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Autowired
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
@PostMapping("/signup")
public ResponseEntity<?> signup(@RequestBody SignupRequest signupRequest) {
if (userRepository.existsByUsername(signupRequest.getUsername())) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Choose different username!");
}
if (userRepository.existsByEmail(signupRequest.getEmail())) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Choose different email!");
}
User user = new User();
user.setUsername(signupRequest.getUsername());
user.setEmail(signupRequest.getEmail());
user.setPassword(passwordEncoder.encode(signupRequest.getPassword()));
user.setAvatar(signupRequest.getAvatar());
user.setRole(signupRequest.getRole());
userRepository.save(user);
return ResponseEntity.ok("User successfully registered!");
}
@PostMapping("/signin")
public ResponseEntity<?> signin(@RequestBody SigninRequest signinRequest) {
Authentication authentication = null;
try {
authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(signinRequest.getUsername(), signinRequest.getPassword()));
} catch (BadCredentialsException e) {
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
}
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtCore.generateToken(authentication);
return ResponseEntity.ok(jwt);
}
}
<code>import com.raddan.OldVK.auth.TokenFilter;
import com.raddan.OldVK.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
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.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
@Configuration
@EnableWebSecurity
public class SecurityConfigurator {
private TokenFilter tokenFilter;
private UserService userService;
public SecurityConfigurator() {}
@Autowired
public void setTokenFilter(TokenFilter tokenFilter) {
this.tokenFilter = tokenFilter;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
// @Bean
// public AuthenticationManagerBuilder configureAuthenticationManagerBuilder(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
// authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
// return authenticationManagerBuilder;
// }
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.cors(httpSecurityCorsConfigurer ->
httpSecurityCorsConfigurer.configurationSource(request ->
new CorsConfiguration().applyPermitDefaultValues())
)
.exceptionHandling(exceptions -> exceptions
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
)
.sessionManagement(sessions -> sessions
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/api/auth/**").permitAll()
.requestMatchers("/secured/user").fullyAuthenticated()
.anyRequest().permitAll()
)
.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}
}
</code>
<code>import com.raddan.OldVK.auth.TokenFilter;
import com.raddan.OldVK.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
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.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
@Configuration
@EnableWebSecurity
public class SecurityConfigurator {
private TokenFilter tokenFilter;
private UserService userService;
public SecurityConfigurator() {}
@Autowired
public void setTokenFilter(TokenFilter tokenFilter) {
this.tokenFilter = tokenFilter;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
// @Bean
// public AuthenticationManagerBuilder configureAuthenticationManagerBuilder(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
// authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
// return authenticationManagerBuilder;
// }
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.cors(httpSecurityCorsConfigurer ->
httpSecurityCorsConfigurer.configurationSource(request ->
new CorsConfiguration().applyPermitDefaultValues())
)
.exceptionHandling(exceptions -> exceptions
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
)
.sessionManagement(sessions -> sessions
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/api/auth/**").permitAll()
.requestMatchers("/secured/user").fullyAuthenticated()
.anyRequest().permitAll()
)
.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}
}
</code>
import com.raddan.OldVK.auth.TokenFilter;
import com.raddan.OldVK.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
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.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
@Configuration
@EnableWebSecurity
public class SecurityConfigurator {
private TokenFilter tokenFilter;
private UserService userService;
public SecurityConfigurator() {}
@Autowired
public void setTokenFilter(TokenFilter tokenFilter) {
this.tokenFilter = tokenFilter;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
// @Bean
// public AuthenticationManagerBuilder configureAuthenticationManagerBuilder(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
// authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
// return authenticationManagerBuilder;
// }
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.cors(httpSecurityCorsConfigurer ->
httpSecurityCorsConfigurer.configurationSource(request ->
new CorsConfiguration().applyPermitDefaultValues())
)
.exceptionHandling(exceptions -> exceptions
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
)
.sessionManagement(sessions -> sessions
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/api/auth/**").permitAll()
.requestMatchers("/secured/user").fullyAuthenticated()
.anyRequest().permitAll()
)
.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}
}
<code>import io.jsonwebtoken.ExpiredJwtException;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
@Component
public class TokenFilter extends OncePerRequestFilter {
private JwtCore jwtCore;
private UserDetailsService userDetailsService;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String jwt = null;
String username = null;
UserDetails userDetails = null;
UsernamePasswordAuthenticationToken auth = null;
try {
String headerAuth = request.getHeader("Authorization");
if (headerAuth != null && headerAuth.startsWith("Bearer ")) {
jwt = headerAuth.substring(7);
}
if (jwt != null) {
try {
username = jwtCore.getNameFromJwt(jwt);
} catch (ExpiredJwtException e) {
// todo
}
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
userDetails = userDetailsService.loadUserByUsername(username);
auth = new UsernamePasswordAuthenticationToken(
userDetails,
null);
SecurityContextHolder.getContext().setAuthentication(auth);
}
}
} catch (Exception e) {
// todo
}
filterChain.doFilter(request, response);
}
}
</code>
<code>import io.jsonwebtoken.ExpiredJwtException;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
@Component
public class TokenFilter extends OncePerRequestFilter {
private JwtCore jwtCore;
private UserDetailsService userDetailsService;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String jwt = null;
String username = null;
UserDetails userDetails = null;
UsernamePasswordAuthenticationToken auth = null;
try {
String headerAuth = request.getHeader("Authorization");
if (headerAuth != null && headerAuth.startsWith("Bearer ")) {
jwt = headerAuth.substring(7);
}
if (jwt != null) {
try {
username = jwtCore.getNameFromJwt(jwt);
} catch (ExpiredJwtException e) {
// todo
}
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
userDetails = userDetailsService.loadUserByUsername(username);
auth = new UsernamePasswordAuthenticationToken(
userDetails,
null);
SecurityContextHolder.getContext().setAuthentication(auth);
}
}
} catch (Exception e) {
// todo
}
filterChain.doFilter(request, response);
}
}
</code>
import io.jsonwebtoken.ExpiredJwtException;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
@Component
public class TokenFilter extends OncePerRequestFilter {
private JwtCore jwtCore;
private UserDetailsService userDetailsService;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String jwt = null;
String username = null;
UserDetails userDetails = null;
UsernamePasswordAuthenticationToken auth = null;
try {
String headerAuth = request.getHeader("Authorization");
if (headerAuth != null && headerAuth.startsWith("Bearer ")) {
jwt = headerAuth.substring(7);
}
if (jwt != null) {
try {
username = jwtCore.getNameFromJwt(jwt);
} catch (ExpiredJwtException e) {
// todo
}
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
userDetails = userDetailsService.loadUserByUsername(username);
auth = new UsernamePasswordAuthenticationToken(
userDetails,
null);
SecurityContextHolder.getContext().setAuthentication(auth);
}
}
} catch (Exception e) {
// todo
}
filterChain.doFilter(request, response);
}
}
<code>import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class JwtCore {
@Value("${OldVK.app.jwtSecret}")
private String jwtSecret;
@Value("${OldVK.app.jwtLifetime}")
private int jwtLifetime;
public String generateToken(Authentication auth) {
UserDetailsImpl userDetails = (UserDetailsImpl) auth.getPrincipal();
return Jwts.builder().setSubject((userDetails.getUsername())).setIssuedAt(new Date())
.setExpiration(new Date((new Date()).getTime() + jwtLifetime))
.signWith(SignatureAlgorithm.HS256, jwtSecret)
.compact();
}
public String getNameFromJwt(String token) {
return Jwts.parserBuilder().setSigningKey(jwtSecret).build().parseClaimsJws(token).getBody().getSubject();
}
}
</code>
<code>import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class JwtCore {
@Value("${OldVK.app.jwtSecret}")
private String jwtSecret;
@Value("${OldVK.app.jwtLifetime}")
private int jwtLifetime;
public String generateToken(Authentication auth) {
UserDetailsImpl userDetails = (UserDetailsImpl) auth.getPrincipal();
return Jwts.builder().setSubject((userDetails.getUsername())).setIssuedAt(new Date())
.setExpiration(new Date((new Date()).getTime() + jwtLifetime))
.signWith(SignatureAlgorithm.HS256, jwtSecret)
.compact();
}
public String getNameFromJwt(String token) {
return Jwts.parserBuilder().setSigningKey(jwtSecret).build().parseClaimsJws(token).getBody().getSubject();
}
}
</code>
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class JwtCore {
@Value("${OldVK.app.jwtSecret}")
private String jwtSecret;
@Value("${OldVK.app.jwtLifetime}")
private int jwtLifetime;
public String generateToken(Authentication auth) {
UserDetailsImpl userDetails = (UserDetailsImpl) auth.getPrincipal();
return Jwts.builder().setSubject((userDetails.getUsername())).setIssuedAt(new Date())
.setExpiration(new Date((new Date()).getTime() + jwtLifetime))
.signWith(SignatureAlgorithm.HS256, jwtSecret)
.compact();
}
public String getNameFromJwt(String token) {
return Jwts.parserBuilder().setSigningKey(jwtSecret).build().parseClaimsJws(token).getBody().getSubject();
}
}
Firstly, I made
<code> @Bean
public AuthenticationManagerBuilder configureAuthenticationManagerBuilder(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
return authenticationManagerBuilder;
}
</code>
<code> @Bean
public AuthenticationManagerBuilder configureAuthenticationManagerBuilder(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
return authenticationManagerBuilder;
}
</code>
@Bean
public AuthenticationManagerBuilder configureAuthenticationManagerBuilder(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
return authenticationManagerBuilder;
}
But application was failed to start due to:
this
I’ll be thankful to any useful help.
P.S. Also I’d like to hear what should I use instead of .signWith & .setSigningKey in JwtCore
New contributor
raddan104 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.