如何使用if else语句将Java传递给auth过滤器 [英] how to use If else statement java to a auth filter
本文介绍了如何使用if else语句将Java传递给auth过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两种通过电话号码和用户名密码对用户进行身份验证的方法,我正在尝试在过滤器中同时使用这两种方法,应该使用If and Else还是有更好的方法?我尝试了下面的代码,尽管它不起作用.
I have two ways of authentication users by phone number and username password, I am trying to use both in my filter, should I use If and Else or there is a better way? I've tried the my code below although it does not working.
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try {
String jwt = getJwtFromRequest(request);
if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) {
Long userId = tokenProvider.getUserIdFromJWT(jwt);
UserDetails userDetails = customUserDetailsService.loadUserById(userId);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
} else if (StringUtils.hasText(jwt) && jwtTokenHandler.validateToken(jwt)) {
String phoneNumber = jwtTokenHandler.validatePhone(jwt) ;
UserDetails userDetailsUser = customUserDetailsService.loadUserPhone(phoneNumber);
UsernamePasswordAuthenticationToken authenticationMobile = new UsernamePasswordAuthenticationToken(userDetailsUser, null, userDetailsUser.getAuthorities());
authenticationMobile.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationMobile);
}
} catch (Exception ex) {
logger.error("Could not set user authentication in security context", ex);
}
filterChain.doFilter(request, response);
}
推荐答案
如果这是最好的选择,我不知道,但是它使它可行.
I don't if this is the best option but it make it worked.
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException,
IOException {
try {
String jwt = getJwtFromRequest(request);
if (StringUtils.hasText(jwt)) {
UserDetails userDetails = null;
if (tokenProvider.validateToken(jwt)) {
Long userId = tokenProvider.getUserIdFromJWT(jwt);
userDetails = customUserDetailsService.loadUserById(userId);
}
if (userDetails != null) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
} catch (Exception tryAgain) {
logger.error("Could not set user authentication. Let's try with mobile auth", tryAgain);
try {
String jwt = getJwtFromRequest(request);
if (StringUtils.hasText(jwt)) {
UserDetails userDetails = null;
if (jwtTokenHandler.validateToken(jwt)) {
String phoneNumber = jwtTokenHandler.validatePhone(jwt);
userDetails = customUserDetailsService.loadUserPhone(phoneNumber);
}
if (userDetails != null) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
} catch (Exception error) {
logger.error("Still could not set user authentication in security context", error);
}
}
filterChain.doFilter(request, response);
}
这篇关于如何使用if else语句将Java传递给auth过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文