创建验证码校验时抛出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回答

JoJo

2018-03-26

在ValidateCodeFilter里打断点看看抛出异常后跳到哪里去了。或者把ValidateCodeFilter的代码贴出来我帮你看看

0
2
飞到死的鸟
非常感谢!
2018-08-13
共2条回复

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程