我有一个类似的过滤器:
<?php
if (isset($_POST['submit_btn']))
{
@$username = $_POST['username'];
@$password = $_POST['password'];
@$cpassword = $_POST['cpassword'];
@$email = $_POST['email'];
if ($password == $cpassword)
{
$query = "SELECT * FROM signin WHERE username = '$username'";
$query_run = mysqli_query($con,$query);
if ($query_run)
{
if (mysqli_num_rows($query_run)>0)
{
echo '<script type="text/javascript">alert("This Username Already exists.. Please try another username!")</script>';
}
else{
$query = "INSERT INTO `signin`(`username`, `password`, `email`) VALUES ('$username','$password','$email')";
$query_run = mysqli_query($con, $query);
if ($query_run)
{
echo '<script type="text/javascript">alert("User Registered succesfully")</script>';
}
else
{
echo '<script type="text/javascript">alert("Registration Unsuccessful due to server error. Please try later")</script>';
}
}
}
else
{
echo '<script type="text/javascript">alert("DB error")</script>';
}
}
else
{
echo '<script type="text/javascript">alert("Password and Confirm Password do not match")</script>';
}
}
?>
我注意到在过滤器之后调用了全局异常处理程序,我认为这就是为什么响应在过滤器中为空白的原因。有没有办法在全局异常处理程序之后调用过滤器?
答案 0 :(得分:-1)
编辑:
否您不能按照OP标题更改顺序,因为GlobalError Handler始终位于保存ControllerAdvices的层中,并且始终位于RequestFilter层和Controller之间。
您说得对。
我推荐您这个答案:https://stackoverflow.com/a/17716298/405749
对此进行扩展:
doFilterInternal()
被称为入站。仅当您调用filterChain.doFilter(request, response);
时,请求才继续在入站轨道上运行,否则将在此处停止,并且返回的响应将返回其输出流中已存在的内容,或者将被此过滤器添加或在出路时仍然遇到过滤器< / li>
现在,handleArgNotValid()
仅在抛出这样的异常的情况下被调用,并有可能将内容添加到Response-Output流中。您的示例未显示是否在此处返回对象,但是从您的OP中我猜您没有。结果输出流为空。
Plz还请注意,没有简单的方法可以将输出流转储/查找到输出流中,除非您将其包装,但这是另一个主题。