这是一个简化的POJO我有:
@Entity
@Table( name = "Patient" )
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
(
name="Discriminator",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="P")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Patient implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID", unique = true, nullable = false)
protected Integer ID;
@ManyToOne(targetEntity = TelephoneType.class, fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="IDPhoneType")
protected TelephoneType phoneType;
@JsonProperty(required=false, value="phoneType")
public TelephoneType getPhoneType() {
return phoneType;
}
public void setPhoneType(TelephoneType phoneType) {
this.phoneType = phoneType;
}
}
Run Code Online (Sandbox Code Playgroud)
现在这是我的班级TelephoneType:
@Entity
@Table( name = "TelephoneType" ) …
Run Code Online (Sandbox Code Playgroud) 在tomcat7上,我们的Web应用程序通过https over port运行8443
并且工作正常,但我们无法将https默认端口(443
)重定向到,8443
因此每当我们必须访问时,必须在URL中包含':8443'应用.我包含了server.xml文件的一些部分.为了能够加载我们的页面而不必在URL中输入端口信息,应该怎么做?
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
enableLookups="false"
redirectPort="8443" />
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
enableLookups="false"
redirectPort="8443" />
<Connector port="443" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
enableLookups="false"
redirectPort="8443" />
...
<Connector port="8443"
maxHttpHeaderSize="65536"
scheme="https"
secure="true"
SSLEnabled="true"
clientAuth="false"
enableLookups="true"
acceptCount="100"
disableUploadTimeout="true"
maxThreads="200"
sslProtocol="TLS"
keystoreFile="/toto/has/a/certificate.jks"
keystorePass="totohasapassword"
protocol="org.apache.coyote.http11.Http11NioProtocol" />
Run Code Online (Sandbox Code Playgroud) 我有一个String作为参数(实际上是一个valueOf(一个整数),并希望将它与DB中的int值的子字符串进行比较.这是我的代码:
ClinicPatients clp = null;
// Get the criteria builder instance from entity manager
final CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
// Create criteria query and pass the value object which needs to be populated as result
CriteriaQuery<ClinicPatients> criteriaQuery = cb.createQuery(ClinicPatients.class);
// Tell to criteria query which tables/entities you want to fetch
final Root<ClinicPatients> rootClp = criteriaQuery.from(ClinicPatients.class);
criteriaQuery.select(rootClp);
Expression<String> e1 = cb.function("CONVERT", String.class, rootClp.get(idCPFieldName));
Predicate p1 = cb.equal(cb.substring(e1, 1, 3), idClinicPatient);
criteriaList.add(p1);
criteriaQuery.where(p1);
// Here entity manager will …
Run Code Online (Sandbox Code Playgroud) 我们在tomcat 7/java7/hibernate/mysql5上运行了一些Web服务.一切都在我的电脑上的localhost tomcat服务器上运行完美,但是当我们在AWS Ubuntu服务器上部署应用程序时,我们收到以下错误消息:
2014年3月25日下午9:59:52 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl配置WARN:HHH000402:使用Hibernate内置连接池(不供生产使用!)2014年3月25日9:59: 52 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO:HHH000401:在URL [jdbc:mysql:// ec2-54-197-214-209]使用驱动程序[com.mysql.jdbc.Driver]. compute-1.amazonaws.com:3306/ChronoMetriq] 2014年3月25日下午9:59:52 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO:HHH000046:连接属性:{user = root,password = **} Mar 25,2014 9:59:52 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO:HHH000006:Autocommit mode:false Mar 25,2014 9:59:52 PM org.hibernate.engine .jdbc.connections.internal.DriverManagerConnectionProviderImpl配置INFO:HHH000115:Hibernate连接池大小:10(min = 1)创建Sess时出错 ionFactory:**错误调用驱动程序#connect null 2014年3月25日下午9:59:52 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException严重:无法将RuntimeException映射到响应,重新抛向HTTP容器 显示java.lang.NullPointerException 在ca.chronometriq.webterm.restapi.Process.getQueueName(Process.java:132)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:606)在com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke( JavaMethodInvokerFactory.java:60)在com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider $ TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)在com.sun.jersey.server.impl.model.method. dispatch.ResourceJavaMethodDispatcher.dispatch(资源 JavaMethodDispatcher.java:75)在com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)在com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(右侧HandPathRule.java:147)com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept( RightHandPathRule.java:147)在com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)在com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.的java:1469)在com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)在com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java):416)在com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)在com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.的java:210)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)在org.apache.catalina.authenticator .AuthenticatorBase.invoke(AuthenticatorBase.java:502)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)在Org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)org.apache.catalina.core.StandardEngineValve.in voke(StandardEngineValve.java:118)在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1024)在org.apache .coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1686)在java.util.concurrent.ThreadPoolExecutor.runWorker(的ThreadPoolExecutor .java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:744)
这是我的hibernate.cfg.xml文件内容:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD …
Run Code Online (Sandbox Code Playgroud) 带有令牌身份验证+基于角色的授权的Jersey 2.22 API(我保护API的方式基于本文的公认答案:使用JAX-RS和Jersey进行基于REST令牌身份验证的最佳实践。最好在阅读之前阅读它试图理解我的问题):
这是我的web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- LISTENERS -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>JerseySpringServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>ca.toto.api.filters</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>ca.toto.api.restapi</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>ca.toto.api.filters.AuthenticationFilter;ca.toto.api.filters.AuthorizationFilter;com.toto.api.restapi.TaskRestService</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseySpringServlet</servlet-name>
<url-pattern>/filters/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JerseySpringServlet</servlet-name>
<url-pattern>/restapi/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
当我调用任务 Web服务时,流程毫无问题地进入第一个过滤器(AuthenticationFilter)(@Priority(Priorities.AUTHENTICATION)),验证我的令牌,从解码的令牌中获取用户,然后将其注册为委托人然后传入第二个过滤器AuthorizationFilter(@Priority(Priorities.AUTHORIZATION)),在这里我从安全上下文中获取用户,获取其角色,然后检查他是否有权进行调用。如果是,请正常退出过滤器(如果否),请使用javax.ws.rs.container.ContainerRequestContext。abortWith方法发送状态为403的响应:
@Secured
@Provider
@Priority(Priorities.AUTHORIZATION)
public class AuthorizationFilter implements ContainerRequestFilter {
...
try {
boolean isAllowed = false;
// Check if the …
Run Code Online (Sandbox Code Playgroud) 我的客户端应用程序将一个字符串发送到服务器端进行解码.有问题的字符串可能包含"+"字符.我的问题是当我想要处理字符串时,它会消除'+'字符消失(可能被视为连接运算符.我怎么能解决这个问题?字符串不是正确的类型吗?我应该使用字节[]代替?
客户端:
$.ajax({
type: "GET",
url: "my/url/DecryptString",
data: "encryptedString="+$("#myStringInput").val(),
...
Run Code Online (Sandbox Code Playgroud)
服务器端代码:
...
public String decryptString(@QueryParam("encryptedString") String encryptedString) {
logger.info("=====> decryptString()");
String decryptedString = null;
Properties properties = new Properties();
logger.debug("encryptedString: " + encryptedString);
// get crypto properties
try {
properties.load(toto.class.getResourceAsStream("/config.properties"));
} catch (IOException e1) {
logger.error(e1.getStackTrace());
}
if(properties.isEmpty()) {
logger.error("Properties file is EMPTY!");
}
String encodeKey = properties.getProperty("toto.crypt.encodeKey");
decryptedString = Crypto.Decrypt(encodeKey, encryptedString.toString());
return decryptedString;
}
Run Code Online (Sandbox Code Playgroud)
在客户端作为加密字符串传递的字符串是:'7NFASg ++ qLOSfDXBR8wzcw =='
以下是服务器端的跟踪:
DEBUG encryptedString:7NFASg qLOSfDXBR8wzcw ==
java ×5
hibernate ×3
jersey-2.0 ×2
jpa ×2
tomcat ×2
tomcat7 ×2
criteria ×1
criteria-api ×1
escaping ×1
httpresponse ×1
https ×1
lazy-loading ×1
rest ×1
server.xml ×1
ssl ×1
string ×1