从某个地方,我收到了一些愚蠢且无效的对Web服务的URL请求,例如

http://localhost:8080/WebApplication1/webresources/testme?stupidparameter=dyndcvgz/&%$\xa7edns


我的示例应用程序如下所示,在Glassfish 4.0和jdk1.7u40上使用Netbeans构建

package WebApplication1;

import javax.ejb.Stateless;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

@Stateless
@Path("/testme")
public class NewSessionBean {
    /**
     * http://localhost:8080/WebApplication1/webresources/testme?stupidparameter=dyndcvgz/&%$\xa7edns
     *
     * @param stupidparameter
     * @return
     */
    @GET
    @Produces("text/plain")
    public String getXml(
            @QueryParam("stupidparameter") String stupidparameter) {
        System.out.println("stupidparameter = " + stupidparameter);

        return "got " + stupidparameter;
    }
}


并使用给定的测试URL,我总是从org.jboss.weld.servlet.WeldListener获得IllegalStateException:isHexDigit。如何避免或处理此异常?

最佳答案

对于Glassfish来说,这似乎是个问题,它使用特殊字符处理参数的方式。

https://java.net/jira/browse/GRIZZLY-1538

在以后的版本中解决问题之前,您可以尝试将参数编码为base64,并在getXml()中接收到参数时将其解码回去。这样可以避免让相关的特殊字符在抛出异常的Glassfish内部传递逻辑。

08-28 21:01