Android okhttp HTTPS協定使用自簽憑證,SSLHandshakeException錯誤處理。

為了okhttp在Debug時可以接受自己的自簽憑證,沒想到卻跳出
javax.net.ssl.SSLHandshakeException錯誤。
使得本機除錯得以進行。
try{
    javax.net.ssl.X509TrustManager[] trustManagers = new javax.net.ssl.X509TrustManager[] {
            new javax.net.ssl.X509TrustManager() {
                @Override
                public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                }
                @Override
                public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                }
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[]{};
                }
            }};
    javax.net.ssl.SSLContext sslContext = javax.net.ssl.SSLContext.getInstance("SSL");
    sslContext.init(null, trustManagers, new java.security.SecureRandom());
    okhttp3Builder.sslSocketFactory(sslContext.getSocketFactory(), trustManagers[0]).hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (KeyManagementException e) {
    e.printStackTrace();
}
廣告
張貼在 Uncategorized | 發表留言

Spring MVC 原來是可以架構multi resolver

原來只要利用order就好了,真是太棒的發明了!

參考:http://www.iteye.com/topic/1120464

@Bean
public TilesConfigurer tilesConfigurer() {
    TilesConfigurer configurer = new TilesConfigurer();
    configurer.setDefinitions(new String[] { "WEB-INF/tiles.xml" });
    configurer.setCheckRefresh(true);
    return configurer;
}
@Bean
public ResourceBundleViewResolver viewResolver(){
    ResourceBundleViewResolver resolver = new ResourceBundleViewResolver();
    resolver.setBasename("views");
    resolver.setOrder(1);
    return resolver;
}
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("WEB-INF/views/");
    resolver.setSuffix(".jsp");
    resolver.setOrder(9);
    return resolver;
}

 

張貼在 Uncategorized | 發表留言

Spring Security Oauth2在SSO,如何兼顧@EnableWebSecurity 與@EnableResourceServer

Spring Security Oauth2在SSO,如何兼顧@EnableWebSecurity 與@EnableResourceServer

參考:

@EnableResourceServer

https://blog.csdn.net/buyaore_wo/article/details/48680981

原來關鍵在

ResourceServerConfiguration 和 SecurityConfiguration上配置的順序, SecurityConfiguration一定要在ResourceServerConfiguration 之前,因為spring實現安全是通過添加過濾器(Filter)來實現的,基本的安全過濾應該在oauth過濾之前,所以在SecurityConfiguration設置@Order(2),在ResourceServerConfiguration上設置@Order(6)。

 

張貼在 Uncategorized | 發表留言

解決Eclipse開啟專案時「Dynamic Web Module 3.1 requires Java 1.7 or newer」

參考:https://www.jianshu.com/p/436264c5174e

1. 一般而言嘗試調整 Eclipse 的Java Compiler,或是Project Facets應該可以解決!

2. 如果是Maven Project可能需要在 pom.xml加入:

<build>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>mavencompilerplugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    </plugins>
</build>
張貼在 Uncategorized | 發表留言

Spring Transation Annotation Configure出現ResultSet closed 錯誤

參考文件:
https://stackoverflow.com/questions/3333133/multiple-transaction-managers-with-transactional-annotationhttps://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html
https://stackoverflow.com/questions/1961371/spring-multiple-transactional-datasources?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

這兩日為了將原先的 Spring framework 由原先的 XML設定改為 Spring Annotation Configuration 方式,
因此大規模的將XML翻寫成Annotation Configuration。

我的架構因為需要與多項分散在不同資料庫中的資料整合,因此原本的DataResource就來自四面八方。至少包括了IBM DB2、MySQL。
原先的架構中有不同的Transation負責不同資料庫的交易機制,參考官方文件Annotation Configuration,
官方網站的範例如下:

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}

於是我直接上述的設定加入後測試,結果在某些nest SQL卻出現了 ResultSet closed現象。
經過數天的測試與爬文,終於知道原因就是發生在TransationManager上。

上述的範例中,transactionManager()中的EntityManagerFactory,是依賴Spring注入的。
原本我認為這樣的注入經由不同的EntityManagerFactory提供後,會自動生成對應的 transactionManager。
但後來才知道原來並不是這樣,transactionManager必須各自獨立產生。

這樣卻引發了另一個問題,transactionManager()之中的EntityManagerFactory是Spring自動注入的,
如果有多個 EntityManagerFactory那該怎麼注入呢?
Spring的注入是依賴 AutoWire,靠著需要的類別、或名稱,從記憶體中搜尋合適的EntityBean注入。

因此,根據上述邏輯。
必須拆開變成不同的 transactionManager,例如:aTransactionManager、bTransactionManager。
並利用加入@Qualifier(“aEntityManagerFactory")方式,指定EntityManagerFactory注入名稱。
然後利用@Bean(name="a")方式為Bean命名。

這樣後續就可以在事務交易時,以@Transactional(value="aTransactionManager")指定由哪個Bean負責事務交易。
當然也就不會發生 ResultSet closed的錯誤資訊了!

 

張貼在 Uncategorized | 發表留言

SpringMVC @ResponseBody 415錯誤處理

參考:http://blog.csdn.net/yixiaoping/article/details/45281721

  1. 務必加入 Library :jackson-annotations-2.9.4.jar、jackson-databind-2.9.4.jar、
  2. jackson-core-2.9.4.jar
  3. 務必修改application.xml
  4. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
    <list>
    <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes">
    <list>
    <value>application/json;charset=UTF-8</value>
    </list>
    </property>
    </bean> </list>
    </property>
    </bean>
  5. 必須加入自訂物件。
  6. 範例:
  7. @RequestMapping(value = “/test")
    public ModelAndView test(@RequestParam(value="id", required=false) String id, @RequestBody(required=false) Book book, HttpServletRequest request){
    ModelAndView rtn = new ModelAndView(“webservice.test");
    rtn.addObject(“id", id );

    return rtn;
    }

 

張貼在 Uncategorized | 發表留言

IBM WebShpere 8.5 + Hibernate

原先以為WebSphere 8.5支援 Java 1.8以後,應該理所當然支援 JPA 2.1。沒想到事與願違,根據Wiki說明,似乎並沒有,僅支援到 JPA 2.0。

於是只好由 Hibernate 5.1 降版至 Hibernate 4.2.21。

1. 更換 Library 由原 Hibernate 5.1 降至 Hibernate 4.2
hibernate-release-4.2.21.Final.zip
http://hibernate.org/orm/releases/

2. 修改程式引用函式部分:
4.2
org.hibernate.ejb.HibernateEntityManager
4.3 ~ 5.1
org.hibernate.jpa.HibernateEntityManager

3. 修改 persistence.xml 設定
4.2
<provider>org.hibernate.ejb.HibernatePersistence</provider>
4.3 ~ 5.1
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

正當感覺一切順利的時候,沒想到竟發生 javassist函式庫衝突的問題。

Error Log出現了: _$$_javassist_ cannot be cast to javassist.util.proxy.Proxy

我不清楚這筆帳該不該算在Hibernate的頭上?但是,的確有人在Hibernate 的 Bug Report 87678778反映了這個問題。

最後,在javassist的git hub 討論群,有人提到了他的解法有效。

pivolo提到:Version 3.21.0-GA solved this problem in my application (hibernate 3.6)

抱著姑且一試的心態,沒想到真的work!實在太感謝 pivolo了!社群的力量真的很大。

 

張貼在 Uncategorized | 發表留言