jboss url路径_在JBoss的服务器端正确解码URL参数

jboss url路径

我今天花了很多时间来弄清楚如何在运行在JBoss上的JSF应用程序中(使用JBoss 7 Final)强制正确解码编码的字符。 当您有例如通过URL传递中文字符时,就会发生此问题。 假设您有指点事件,编码为%E6%8C%87%E4%BA%8B。 令人惊讶,但是这些字符以指事的形式到达服务器端。 服务器使用ISO-8859-1自动解码它们。 因此,如果您尝试像这样自己解码,则没关系:

FacesContext fc = FacesContext.getCurrentInstance();
String param = fc.getExternalContext().getRequestParameterMap().get(name);
String decodedParam = java.net.URLDecoder.decode(param, "UTF-8");

这无济于事,因为字符已经被错误地解码,并且您从请求参数映射中获得了已经被错误解码的字符。 如果您在页面上也没有帮助

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

要克服此错误,您需要做两件事:特殊的字符编码过滤器和JBoss的standalone.xml中的配置。 过滤器应同时为请求和响应设置配置的编码。

public class CharacterEncodingFilter implements Filter {/** The default character encoding to set for request / response. */private String encoding = null;/** The filter configuration object. */private FilterConfig filterConfig;/** Should a character encoding specified by the client be ignored? */private boolean ignore = true;public void destroy() {encoding = null;filterConfig = null;}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException {// conditionally select and set the character encoding to be usedif ((ignore || (request.getCharacterEncoding() == null)) && (encoding != null)) {request.setCharacterEncoding(encoding);response.setCharacterEncoding(encoding);}// pass control on to the next filterchain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;this.encoding = filterConfig.getInitParameter("encoding");String value = filterConfig.getInitParameter("ignore");this.ignore = ((value == null) || value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes"));}
}

注意:如果仅设置请求的编码,则无济于事。 您还应该通过response.setCharacterEncoding(encoding)将其设置为响应。 web.xml中的配置看起来像

<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>xyz.mypackage.CharacterEncodingFilter</filter-class><init-param><description>override any encodings from client</description><param-name>ignore</param-name><param-value>true</param-value></init-param><init-param><description>the encoding to use</description><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>*.jsf</url-pattern>
</filter-mapping>

现在,您必须在关闭<extensions>标记之后直接将以下系统属性添加到standalone.xml中:

<system-properties><property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/><property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

从文档中:

  • org.apache.catalina.connector.URI_ENCODING指定%xx解码URL后用于解码URI字节的字符编码。 如果未指定,将使用ISO-8859-1。
  • org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING指定是否应将contentType中指定的编码用于URI查询参数,而不是使用org.apache.catalina.connector.URI_ENCODING。 出现此设置是为了与Tomcat 4.1.x兼容,其中在contentType中指定的编码或使用Request.setCharacterEncoding方法显式设置的编码也用于URL中的参数。 默认值为false。

现在,JBoss看起来为响应设置了字符编码,并使用它来解码URL参数。 希望此信息可以帮助您节省时间。

参考: 在JBoss中 ,我们的JCG合作伙伴 Oleg Varaksin在软件开发博客Thoughts上 正确解码了URL参数 。

翻译自: https://www.javacodegeeks.com/2013/07/proper-decoding-of-url-parameters-on-the-server-side-in-jboss.html

jboss url路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在JDK 10中不可变与不可修改

大约两个月前&#xff0c; 斯图尔特马克斯 &#xff08; Stuart Marks&#xff09;写道&#xff1a;“ 不变性就像葡萄酒 。” 然后&#xff0c;他提醒读者注意叔本华的熵定律 &#xff1a;“如果将一勺酒倒入装满污水的桶中&#xff0c;就会产生污水。 如果将一勺污水倒入装满…

@async方法不调用了_在Spring中使用Future对象调用Async方法调用

async方法不调用了下一个示例将演示Spring容器内部的异步方法调用。 为什么我们需要异步方法调用&#xff1f; 在某些情况下&#xff0c;我们并不真正知道是否需要重播或何时应返回结果。 传统方式在Java EE世界中处理异步调用的方法是使用队列/主题。 我们可以在Spring中进行相…

不同的休眠命名策略

本文讨论了hibernate提供的不同命名策略&#xff0c;以及命名策略从hibernate 4中的hibernate.ejb.naming_strategy到hibernate 5中的hibernate.implicit_naming_strategy和hibernate.physical_naming_strategy的转变。最后&#xff0c;我们将研究一下在休眠和配置中实施自定义…

基于FPGA,如何用Verilog HDL实现64位宽的扰码器?附上仿真结果。

文章目录前言一、扰码器1、什么是扰码器2、扰码的原理3、产生扰码的多项式二、Scrambler的Verilog实现1、scrambler.v2、scrambler_tb.v三、仿真结果四、总结前言 在数字信号处理系统中&#xff0c;因为发送端的数字信号序列可能会出现很长一段都是“0”&#xff0c;或很长一段…

基于FPGA,解扰码器Verilog的实现,以及扰码器与解扰码器的联合仿真。附上仿真结果。

文章目录前言一、扰码器二、解扰码器三、Descrambler的Verilog实现1、descrambler.v2、descrambler_tb.v四、扰码器与解扰码器的联合仿真1、scrambler_test.v2、scrambler_test_tb.v3、联合仿真结果五、总结前言 在数字信号处理系统中&#xff0c;因为发送端的数字信号序列可能…

光纤通信系统简介

文章目录前言一、直接检测光通信系统二、相干光通信系统三、直接检测与相干检测1、直接检测2、相干检测3、相干检测的优缺点&#xff08;1&#xff09;相干检测的缺点&#xff08;2&#xff09;相干检测的优点总结参考文献前言 光通信系统的基本组成结构如下图所示。光通信系统…

epyc rome_使用Encog,ROME,JSoup和Google Guava进行博客分类

epyc rome继续进行编程收集情报 &#xff08; Programming Collection Intelligence &#xff0c;PCI&#xff09;&#xff0c;下一个练习是使用距离得分根据相关博客中使用的单词来确定博客列表。 我已经找到Encog作为AI /机器学习算法的框架&#xff0c;为此&#xff0c;我需…

重构字符串型系统

去年&#xff0c;我加入了一个项目&#xff0c;该项目接管了另一个未能满足客户需求的软件公司。 如您所知&#xff0c;在“继承”的项目及其代码库中&#xff0c;有许多事情可以并且应该加以改进。 可悲的是&#xff08;但并不奇怪&#xff09;领域模型就是这样一个孤零零&…

OFDM仿真程序,可直接运行,注释详细(没人注释比我还详细了)

OFDM仿真程序 clc clear allIFFT_bin_length128; %IFFT点数128个 carrier_count50; %子信道&#xff08;子载波&#xff09;数目 bits_per_symbol2; %4进制符号 symbols_per_carrier200;%每个子信道或者说子载波有200个符号 SNR0:1:40; for num1:41baseband_out_lengthcarrie…

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制&#xff08;PCM&#xff09;ADC受到了制造工艺的限制&#xff0c;无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺…

无载波幅度和相位调制(CAP)与QAM调制的详细解析(可见光通信应用场景),以及CAP matlab程序下载链接

文章目录前言一、QAM调制&#xff1f;二、无载波幅度和相位调制&#xff08;CAP)三、CAP调制与QAM调制之间的联系&#xff08;异同点&#xff09;四、CAP调制相比于QAM调制的优缺点4.1、优点4.2、缺点五、无载波幅度和相位调制matlab程序五、Reference前言 目前的通信系统中&a…

jpa 事务嵌套事务_JPA 2 | EntityManagers,事务及其周围的一切

jpa 事务嵌套事务介绍 对我来说&#xff0c;最令人困惑和不清楚的事情之一是&#xff0c;作为Java开发人员&#xff0c;一直是围绕事务管理的谜团&#xff0c;尤其是JPA如何处理事务管理。 事务什么时候开始&#xff0c;什么时候结束&#xff0c;实体的持久化方式&#xff0c;持…

Matlab中装载和存储实验数据的操作

一、装载实验数据 例如&#xff0c;以下程序&#xff0c;其中path是路径&#xff0c;strcat函数将后面的参数组合成一个字符串。load函数将由twoband_CAP4_400MBd_2000MSa_float_字符串与Tx.txt构成的: twoband_CAP4_400MBd_2000MSa_float_Tx.txt文件读取至matlab中。 numSam…

无服务器革命:好,坏和丑

“这是愚蠢的。 比愚蠢还糟&#xff1a;这是一场营销炒作。” ‐ 理查德斯托曼 &#xff08; Richard Stallman&#xff09;对云计算的评论&#xff0c;2008年9月 而且&#xff0c;十年后&#xff0c;当有人提到这个词时&#xff0c;您开始三思而后行&#xff1a;是到天上掉的…

MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?

一、什么是频谱&#xff1f; 频谱的全称是频率谱密度。在对时域信号进行认识和研究的过程中非常不便&#xff0c;那我们该如何更直观地认识信号&#xff0c;更清楚地了解信号的特点呢&#xff1f; 利用傅里叶变换将时域信号变换到频域。 我们知道&#xff0c;在通信领域里傅…

Verilog HDL中模块参数传递的方法

文章目录前言一、参数传递二、参数传递方法1.方法一2.方法二3.方法三总结前言 “parameter”是Verilog HDL中的一个关键字&#xff0c;代表着参数型常量&#xff0c;即用parameter来定义一个标识符代表一个常量&#xff0c;这样可以提高程序的可读性与可维护性。 例如&#xf…

仔细看看_仔细看看,您会发现需要改进的地方

仔细看看我建议您做一个练习&#xff1a;明天早上返回工作时&#xff0c;浏览项目的源代码&#xff0c;并尝试寻找重构的机会。 即使老板没有要求也要这样做。 这样做是因为您想要一些激动人心的工作时间。 重构是改变已经可以正常工作的艺术 。 但是要进行重构&#xff0c;您…

Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别

文章目录前言一、单目运算符、双目运算符和三目运算符二、位运算符三、逻辑运算符四、缩减运算符五、总结前言 我们在学习和理解Verilog HDL中的一些运算符的意义时&#xff0c;可能会对一些运算符的使用产生混乱&#xff0c;因此本文整理了Verilog HDL中&与&&、|…

Verilog HDL中容易生成锁存器的两种情况

在Verilog HDL的程序设计中&#xff0c;有两种情况会生成锁存器。 第一种情况 在always块中使用if语句&#xff0c;但是没有else&#xff0c;这会导致当条件不成立时&#xff0c;没有其他语句可执行&#xff0c;使得被赋值的寄存器一直保持不变&#xff0c;”锁存“住。 第二…

Spring Security与Maven教程

1.简介 在这篇文章中&#xff0c;我们将演示如何针对非常特定的用例将Maven依赖项用于Spring Security。 我们使用的所有库的最新版本都可以在Maven Central上找到。 在项目中&#xff0c;了解Maven依赖项的工作方式和管理方式对于有效的构建周期非常重要&#xff0c;并且对于…