几天前我就开始工作了,我忘了我做了什么改变/更新了什么。
我试图对featchjwt令牌执行/login请求,但是它返回userdetailsserviceimpl对象,我将authfilter设置为/login;
我从/login请求获取的对象(返回userdetailsserviceimpl.loaduserbyusername(user.getemail())
{
"password": "$2a$10$SfCMqNdUbSOi.LbbfJrntu70IqEBTnm6NVjHjLXblgH6rHd8dG.cW",
"username": "ido@hornstienas.com",
"authorities": [],
"accountNonExpired": true,
"accountNonLocked": true,
"credentialsNonExpired": true,
"enabled": true
}
这些是我的课程:
我的主控制器:
@RestController
public class MainController {
@Autowired
private UserRepo userRepo;
@Autowired
private SpecialsRepo specialsRepo;
@Autowired
private ProductRepo productRepo;
@Autowired
private PaypalTransactionRepo paypalTransactionRepo;
@Autowired
private UserDetailsServiceImpl userDetailsServiceImpl;
private BCryptPasswordEncoder bCryptPasswordEncoder;
public MainController(UserRepo userRepo,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRepo = userRepo;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
@PostMapping
(value = "/signup")
public ResponseEntity<Object> createCustomer(@RequestBody models.User user) {
System.out.println("Incoming object - "+ user.toString());
//Customer cm1 = customerRepository.findByEmail(customer.getEmail());
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String now = LocalDateTime.now().format(dtf);
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword().toString()));
System.out.println(user.getPassword());
user.setDateCreated(now.toString());
user.setRole("USER");
userRepo.save(new models.User(user));
return ResponseEntity.status(HttpStatus.CREATED).body(null);
//repository.save(new Customer(customer.email,customer.password,customer.firstName,customer.lastName));
}
@PostMapping
(value = "/adminsignup")
public ResponseEntity<Object> createAdmin(@RequestBody models.User user) {
System.out.println("Incoming object - "+ user.toString());
//Customer cm1 = customerRepository.findByEmail(customer.getEmail());
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String now = LocalDateTime.now().format(dtf);
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword().toString()));
System.out.println(user.getPassword());
user.setDateCreated(now.toString());
userRepo.save(new models.User(user.getEmail(),user.getPassword(),now,"ADMIN"));
return ResponseEntity.status(HttpStatus.CREATED).body(null);
//repository.save(new Customer(customer.email,customer.password,customer.firstName,customer.lastName));
}
@PostMapping(
value = "/login")
public UserDetails login(@RequestBody models.User user) {
return userDetailsServiceImpl.loadUserByUsername(user.getEmail());
}
这是我的userdetailsserviceimpl类:
public class UserDetailsServiceImpl implements UserDetailsService {
private UserRepo userRepo;
public UserDetailsServiceImpl(UserRepo userRepo) {
this.userRepo = userRepo;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
models.User user = userRepo.findByEmail(username);
if (user == null) {
throw new UsernameNotFoundException(username);
}
return new User(user.getEmail(), user.getPassword(), emptyList());
}
}
这是我的authfilters:
public static final String SECRET = "SecretKeyToGenJWTs";
public static final long EXPIRATION_TIME = 864000000; // 10 days
public static final String TOKEN_PREFIX = "Bearer ";
public static final String HEADER_STRING = "Authorization";
public static final String SIGN_UP_URL = "/signup";
private AuthenticationManager authenticationManager;
@Autowired
private UserRepo userRepo;
public AuthFilter(AuthenticationManager authenticationManager,UserRepo userRepo) {
this.authenticationManager = authenticationManager;
this.userRepo = userRepo;
setFilterProcessesUrl("/login");
}
@Override
public Authentication attemptAuthentication(HttpServletRequest req,
HttpServletResponse res) throws AuthenticationException {
try {
models.User creds = new ObjectMapper()
.readValue(req.getInputStream(), models.User.class);
return authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
creds.getEmail(),
creds.getPassword())
);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
protected void successfulAuthentication(HttpServletRequest req,
HttpServletResponse res,
FilterChain chain,
Authentication auth) throws IOException {
//System.out.println("Request "+req.getInputStream().toString());
models.User user = userRepo.findByEmail(((User) auth.getPrincipal()).getUsername());
System.out.println("Will this work? "+user.toString());
String token = JWT.create()
.withSubject(((User) auth.getPrincipal()).getUsername())
.withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.sign(Algorithm.HMAC512(SECRET.getBytes()));
String body = token;
System.out.println("THis is token - "+token);
res.getWriter().write(body);
res.getWriter().flush();
}
}
另一个筛选器:
public static final String SECRET = "SecretKeyToGenJWTs";
public static final long EXPIRATION_TIME = 864000000; // 10 days
public static final String TOKEN_PREFIX = "Bearer ";
public static final String HEADER_STRING = "Authorization";
public static final String SIGN_UP_URL = "/signup";
public JWTAuthFilter(AuthenticationManager authManager) {
super(authManager);
}
@Override
protected void doFilterInternal(HttpServletRequest req,
HttpServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("Filtering tright now");
String header = req.getHeader(HEADER_STRING);
if (header == null || !header.startsWith(TOKEN_PREFIX)) {
chain.doFilter(req, res);
return;
}
UsernamePasswordAuthenticationToken authentication = getAuthentication(req);
SecurityContextHolder.getContext().setAuthentication(authentication);
chain.doFilter(req, res);
}
private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
String token = request.getHeader(HEADER_STRING);
if (token != null) {
// parse the token.
String user = JWT.require(Algorithm.HMAC512(SECRET.getBytes()))
.build()
.verify(token.replace(TOKEN_PREFIX, ""))
.getSubject();
if (user != null) {
return new UsernamePasswordAuthenticationToken(user, null);
}
return null;
}
return null;
}
}
暂无答案!
目前还没有任何答案,快来回答吧!