环境:NetBeans 6.9.1,GlassFish 3.1
我有一个Java Web应用程序.如何动态获取服务器地址和应用程序名称?'2in1'解决方案对我来说是最好的:http://localhost:8080/AppName/
.
有没有实用的方法来获取这些信息?
假设它的值AppName
是固定的,所以我只需要主机地址.是否可以通过JMX检索它?还有其他方法吗?
在 MySQL 中,如何SELECT
对常量值数组执行 a ?类似的东西:
SELECT ['1', '2', '3'] AS ID;
所需的输出是:
+-----+
| ID |
+-----+
| 1 |
| 2 |
| 3 |
Run Code Online (Sandbox Code Playgroud) 我试图实现一个通用方法,将给定对象序列化为JSON,但只有那些在集合中传递的属性.如果可能的话,我希望在没有指定@JsonFilter
类的情况下获得此功能.为此,我试图使用FilterExceptFilter
杰克逊2.4.1.依赖关系:
这就是我现在所拥有的:
public static String serializeOnlyGivenFields(Object o,
Collection<String> fields) throws JsonProcessingException {
if ((fields == null) || fields.isEmpty()) return null;
Set<String> properties = new HashSet<String>(fields);
SimpleBeanPropertyFilter filter =
new SimpleBeanPropertyFilter.FilterExceptFilter(properties);
SimpleFilterProvider fProvider = new SimpleFilterProvider();
fProvider.addFilter("fieldFilter", filter);
fProvider.setDefaultFilter(filter);
ObjectMapper mapper = new ObjectMapper();
mapper.setFilters(fProvider);
String json = mapper.writeValueAsString(o);
return json;
}
Run Code Online (Sandbox Code Playgroud)
但是,永远不会应用过滤器.它总是序列化所有属性.
Set<String> fields = new HashSet<String>(); fields.add("name");
String json = Serializer.serializeOnlyGivenFields(e, fields);
System.out.println(json);
Run Code Online (Sandbox Code Playgroud)
{"name":"测试实体","描述":"测试说明"}
我也曾尝试注册FilterProvider …
我试图在基于Java 6(更新31)的客户端上调用在JDK7/WildFly 8.2上运行的受SSL保护的Web服务.
我在客户端遇到的第一个问题是:
javax.net.ssl.SSLException:收到致命警报:unexpected_message
通过设置javax.net.debug
为all
双方,我在服务器端得到以下提示:
javax.net.ssl.SSLHandshakeException:已禁用SSLv2Hello
快速研究表明,
默认情况下,客户端上禁用SSLv2Hello:在Java SE 7中,SSLv2Hello将从客户端上的默认启用协议列表中删除.
所以我试图SSLv2Hello
在WildFly中启用standalone.xml
:
<https-listener name="https"
socket-binding="https"
security-realm="UndertowRealm"
enabled-protocols="SSLv2, SSLv2Hello, TLSv1, TLSv1.1, TLSv1.2"
/>
Run Code Online (Sandbox Code Playgroud)
而服务器上的结果是:
javax.net.ssl.SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适)
所以我意识到,我应该尝试在客户端强制使用TLS,而不是在服务器上启用SSLv2Hello.我试图在我的Web服务调用之前设置,但没有任何效果.System.setProperty("https.protocols", "TLSv1");
我应该配置什么以及如何使握手工作?
我SSLSocketFactory
在服务器上打印了默认支持的密码套件:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
TLS_ECDHE_RSA_WITH_RC4_128_SHA,
SSL_RSA_WITH_RC4_128_SHA,
TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
TLS_ECDH_RSA_WITH_RC4_128_SHA,
SSL_RSA_WITH_RC4_128_MD5,
TLS_EMPTY_RENEGOTIATION_INFO_SCSV
Run Code Online (Sandbox Code Playgroud) 我正在实现一个将由外部Java和PHP客户端使用的JAX-WS Web服务.
客户端必须使用存储在每个客户端的数据库中的用户名和密码进行身份验证.
最好使用哪种身份验证机制来确保misc客户端可以使用它?
更新
我有一个使用该机制保护的Metro 2.1.1 WebService Transport Security (SSL)
.我想使用.NET 3.5+ WCF客户端访问此服务.我发现这个链接解决了同样的问题,但是我仍然无法建立一个有效的客户端.我想我在客户端配置中混合了一些东西.
在对四郎类JndiLdapRealm的JavaDoc明确地说,授权是默认禁用,对LDAP服务器的授权应该由用户通过子类化和压倒一切的实现JndiLdapRealm#doGetAuthorizationInfo
方法.是否有关于如何做到这一点,包括处理通信/协议与可随时随地LDAP服务器的示例代码?
我将以下简单的webservice声明为@Stateless
EJB,在GlassFish 3.1.2.2上使用EclipseLink 2.4.1运行,使用JTA DataSource
连接到MySQL数据库:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response update(TimeRow e) throws Exception {
if ((e.getKey() == null) || !e.getKey().keyValid()) {
return Response.status(400).build();
}
TimeRow existing = em.find(TimeRow.class, e.getKey());
if (existing == null) {
em.persist(e);
} else {
existing.setValues(e.getValues());
em.flush();
}
return Response.status(204).build();
}
Run Code Online (Sandbox Code Playgroud)
实体类TimeRow
:
@Entity
@NamedQueries({
@NamedQuery(name="TimeRow.findAllByUser",
query="SELECT t FROM TimeRow t WHERE t.table.userId = :uid")
})
public class TimeRow implements Serializable {
@EmbeddedId
private TimeRowPK key;
@MapsId("userId")
@JoinColumn(name = "USERID", referencedColumnName = "userId")
@ManyToOne …
Run Code Online (Sandbox Code Playgroud) 我在Java Web应用程序(JSF1.2,RichFaces)中创建了一些"保存"bean功能.它使用JAXB将其转换为XML字符串,然后将其存储在数据库中.如果用户将其加载回来,我想通知用户是否更改了(bean)内容并且应该再次保存.
我的想法是覆盖hashCode()
'with'函数org.apache.commons.lang.builder.HashCodeBuilder
,但是我有很多字段和子元素.有没有其他方法来处理这种功能?
编辑
"比较"是在另一个视图上完成的!
任何帮助,将不胜感激!
我试图用新的纬度,经度帮助更新PrimeFaces的谷歌地图p:ajax
,但它不起作用......我正在使用JSF 2.0.我p:ajax
早先以类似的方式使用它,它工作得很漂亮.知道为什么这不起作用吗?以下是代码,contForm
是表单的id.
<h:outputText value="Latitude :"/>
<h:inputText value="#{confirmBrandRegistration.newBrand.mapLatitude}" size="10">
<p:ajax event="blur" update="contForm:gMapID"/>
</h:inputText>
<h:outputText value=" Longitude :"/>
<h:inputText value="#{confirmBrandRegistration.newBrand.mapLongitude}" size="10" >
<p:ajax event="blur" update="contForm:gMapID"/>
</h:inputText>
<h:outputText value=" Marker :"/>
<h:inputText value="#{confirmBrandRegistration.newBrand.mapMarker}" size="20" >
<p:ajax event="blur" update="contForm:gMapID"
listener="#{confirmBrandRegistration.updateMarker}"/>
</h:inputText>
</h:panelGrid>
<p:outputPanel id="gMapID">
<f:view contentType="text/html">
<p:gmap center="#{confirmBrandRegistration.newBrand.mapLatitude}, #{confirmBrandRegistration.newBrand.mapLongitude}"
zoom="16" type="HYBRID" streetView="true"
model="#{confirmBrandRegistration.simpleModel}"
style="width:500px;height:400px" />
</f:view>
</p:outputPanel>
Run Code Online (Sandbox Code Playgroud)