创建验证码校验时抛出AuthenticationException, 不能被正确的返回错误信息,却被重定向为登录
来源:4-11 短信登录开发
飞到死的鸟
2018-03-25
如题,在创建校验码进入ValidateCodeController
时,因某些原因抛出AuthenticationException,按我的理解应该是直接返回前台错误信息才对。但是却重定向到了BrowserSecurityController
这个问题应该是什么原因产生的?
@Component
public class ValidateCodeProcessorHodler {
@Autowired
private Map<String, ValidateCodeProcessor> validateCodeProcessorMap;
public ValidateCodeProcessor findValidateCodeProcessor(String type) {
String processorName = type.toLowerCase() + ValidateCodeProcessor.class.getSimpleName();
ValidateCodeProcessor processor = validateCodeProcessorMap.get(processorName);
if (processor == null) {
// 在此抛出异常
throw new ValidateCodeException("校验码处理器" + processorName + "不存在");
}
return processor;
}
}被重定向到了登录的controller
@RestController
public class BrowserSecurityController {
@Autowired
private SecurityProperties securityProperties;
private Logger logger = LoggerFactory.getLogger(getClass());
private RequestCache cacherequest = new HttpSessionRequestCache();
private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
@RequestMapping("/authentication/require")
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public ResponseResult requireAuthentication(HttpServletRequest request, HttpServletResponse response) throws IOException {
SavedRequest savedRequest = cacherequest.getRequest(request, response);
// 被重定向到了登录
if (savedRequest != null) {
String requireUrl = savedRequest.getRedirectUrl();
logger.info("未登录,请求的路径是:"+ requireUrl);
if (StringUtils.endsWithIgnoreCase(requireUrl, ".html")) {
redirectStrategy.sendRedirect(request, response, securityProperties.getBrowser().getLoginPage());
}
}
return ResponseResult.build(401, "用户未登录,请引导用户到登录页");
}
}所以在前台页面出现错误提示
{"status":401,"message":"用户未登录,请引导用户到登录页","data":null}而不是我想要看到的 "校验码处理器不存在" 提示
写回答
1回答
-
在ValidateCodeFilter里打断点看看抛出异常后跳到哪里去了。或者把ValidateCodeFilter的代码贴出来我帮你看看
022018-08-13
Spring Security技术栈开发企业级认证与授权
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
2662 学习 · 1561 问题
相似问题