A. 開發一套小型且完整的數據管理系統需要哪些知識
mongodb 做資料庫nodejs寫服務端html + css + js 寫瀏覽器端需要哪些知識很難說得准確,業務是一定要懂的,基本的技術如各環境的api,js語言,頁面設計與重構也是必須會的,再往上說,整個系統的架構設計,底層數據結構設計,演算法設計,其實不是需要哪些知識,而是,你會的就用得上,如果你會,我想大數據,機器學習都是可以用上的。
B. JRebel啟動報錯
項目概況:SpringMVC
新接手的項目,安裝JRebel插譽喊遲件(JRebel for IntelliJ v2019.1.1)後,啟動報錯,在此之前是可以正常啟動項目。
報錯核心信息: Exception in thread "Timer-RefreshDataTask" java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
報慶李錯詳細信息:
五月 10, 2019 10:37:36 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
嚴重: The web application [/edi-web] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
五月 10, 2019 10:37:36 上滲伏午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
嚴重: The web application [/edi-web] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
五月 10, 2019 10:37:36 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
嚴重: The web application [/edi-web] registered the JDBC driver [oracle.jdbc.driver.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
五月 10, 2019 10:37:36 上午 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
嚴重: The web application [/edi-web] created a ThreadLocal with key of type [net.sf.json.AbstractJSON.CycleSet] (value [net.sf.json.AbstractJSON$CycleSet@52abeb56]) and a value of type [java.lang.ref.SoftReference] (value [java.lang.ref.SoftReference@73639524]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
[2019-05-10 10:37:36,507] Artifact xbwl-edi-web:war exploded: Error ring artifact deployment. See server log for details.
log4j:WARN No appenders could be found for logger (org.springframework.scheling.quartz.SchelerFactoryBean).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
五月 10, 2019 10:37:45 上午 org.apache.catalina.loader.WebappClassLoader loadClass
信息: Illegal access: this web application instance has been stopped already. Could not load org.springframework.core.NestedExceptionUtils. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.springframework.core.NestedRuntimeException.<clinit>(NestedRuntimeException.java:45)
at org.springframework.scheling.quartz.SchelerFactoryBean$1.run(SchelerFactoryBean.java:673)
Exception in thread "Quartz Scheler [SYSSTATIC_SCHEDULE]" java.lang.NoClassDefFoundError: org/springframework/core/NestedExceptionUtils
at org.springframework.core.NestedRuntimeException.<clinit>(NestedRuntimeException.java:45)
at org.springframework.scheling.quartz.SchelerFactoryBean$1.run(SchelerFactoryBean.java:673)
Caused by: java.lang.ClassNotFoundException: org.springframework.core.NestedExceptionUtils
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 2 more
Exception in thread "Timer-RefreshDataTask" java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at org.springframework.context.support..getBeanFactory(.java:170)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
at com.xbwl.core.cache.CacheManager.<init>(CacheManager.java:20)
at com.xbwl.core.cache.CacheManager.getInstance(CacheManager.java:54)
at com.xbwl.core.mq.rabbitMq.service.impl.RabbitMqServiceImpl$RefreshDataTask.run(RabbitMqServiceImpl.java:107)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Exception in thread "Timer-RefreshDataTask" java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at org.springframework.context.support..getBeanFactory(.java:170)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
at com.xbwl.core.cache.CacheManager.<init>(CacheManager.java:20)
at com.xbwl.core.cache.CacheManager.getInstance(CacheManager.java:54)
at com.xbwl.core.mq.MqInterceptor.initMqCache(MqInterceptor.java:70)
at com.xbwl.core.mq.MqInterceptor.access$000(MqInterceptor.java:26)
at com.xbwl.core.mq.MqInterceptor$RefreshDataTask.run(MqInterceptor.java:64)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Exception in thread "Timer-RefreshDataTask" java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at org.springframework.context.support..getBeanFactory(.java:170)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
at com.xbwl.core.cache.CacheManager.<init>(CacheManager.java:20)
at com.xbwl.core.cache.CacheManager.getInstance(CacheManager.java:54)
at com.xbwl.core.service.impl.BaiWebApiServiceImpl$RefreshDataTask.run(BaiWebApiServiceImpl.java:41)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
暫未解決,待續
C. java多條件查詢問題
java多條件不定條件查詢
網站或各類管理系統都會用到搜索,會用到一個或多個不確定條件搜索,單條件搜索比較簡單,有時候會有多個條件共同查詢,如果系統中已經提供了相關的方法供你使用最好,像我做這老系統改版,需要添加搜索,就要自己寫了。開始也沒管那麼多,就是拼sql,但是後來發現要加搜索地方不少,總是這樣寫既增加了工作量,還要做很多重復工作,說不定以後還會做這樣的工作,所以還是寫一個比較通用的查詢方法。
package com.test;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.poi.hssf.record.formula.functions.T;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import com.ams.bo.webapi.dto.Agent;
public class MultiTaskSearch {
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Resource(name = "storeFrontDAO")
private Map search() {
String name="公司";
String email="@163";
String invoiceTitle="公司";
int sign=1;
String at="2012-04-26";
Map<String, Object> map=new LinkedHashMap<String, Object>();//保持添加順序
// Map<String, Object> map=new HashMap<String, Object>();//無固定順序
map.put("name like", name);
map.put("email like", email);
map.put("invoiceTitle like", invoiceTitle);
map.put("sign =", sign);
map.put("addtime>=", at);
return map;
}
public <T> List<T> dbSearch(Class typeClass,Map<String, Object> map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new (paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
List<T> TList=null;
String tablename = typeClass.getName().substring(
typeClass.getName().lastIndexOf(".") + 1);
StringBuffer sql=new StringBuffer("select * from ");
sql.append(tablename);
if (map.size()!=0) {
sql.append(" t where 1=1");//後面只需拼接and條件
}
Set<Entry<String, Object>> set=map.entrySet();
Iterator iterator=set.iterator();
for (int i = 0; i < set.size(); i++) {
Map.Entry mapEntry=(Entry) iterator.next();
if (!"".equals(mapEntry.getValue().toString())) {
//模糊匹配
if (mapEntry.getKey().toString().contains("like")) {
// sql.append(" and t."+mapEntry.getKey()+" "+mapEntry.getValue()+" ");
sql.append(" and t."+mapEntry.getKey()+" '%"+mapEntry.getValue()+"%'");
//精確匹配
}else {
// sql.append(" and t."+mapEntry.getKey()+" '%"+mapEntry.getValue()+"%'");
sql.append(" and t."+mapEntry.getKey()+" "+mapEntry.getValue()+" ");
}
}
}
if (null!=orderby&&!"".equals(orderby)) {
sql.append(orderby);
}
System.out.println("SQL:"+sql.toString());
TList=jdbcTemplate.query(sql.toString(),new Object[] {}, new BeanPropertyRowMapper<T> (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
List<Agent> agents=mt.dbSearch(Agent.class, map,orderby);
for (Agent agent : agents) {
System.out.println(agent.getName());
}
System.out.println("****************"+agents.size());
}
}
或者可以用拼sql的方法實現
使用union關鍵字可以在一個文本框內搜索出多個條件的數據
select t1.* from
(
select * from agent where name like '"2%'
union
select * from agent where email like '"2%'
union
select * from agent where ContactPerson like '"2%'
) t1
這種查詢結果是所有的集合,也可以把union換成or
D. Jersey 2.x集成Spring,怎麼做單元測試
這里介紹另一個方法,利用「內存中的容器」來調試,就是我們不用打包並扔到tomcat中,自己在IDE中,用Unit Test的方法來測試。
1. Jersey的測試框架支持的容器很多,這里選用了常用的grizzly2
在項目的pom.xml中,引入依賴:
<dependency>
<groupId>org.glassfish.jersey.test-framework</groupId>
<artifactId>jersey-test-framework-core</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
2. 寫Jersey的Resource文件
@Path("my/jersey")
public class TestResource{
@Autowired
protected SystemManager systemManager; //這由spring注入
@GET
@Path("/test")
public String test(@QueryParam("systemId") Integer systemId) {
return "test";
}
}
3. 書寫SystemManager和SystemManagerImpl
略
4. 把manager配置到Spring Application.xml中
略
5. 書寫Jersey Application
@Path("webapi")
public class TestApplication extends ResourceConfig {
public TestApplication(){
register(RequestContextFilter.class);
register(TestResource.class);
}
}
6. 書寫Unit Test文件
public class MyRestTest extends JerseyTest {
@Override
protected Application configure() {
ResourceConfig rc = new MyApplication()
.register(SpringLifecycleListener.class)
.register(RequestContextFilter.class);
enable(TestProperties.LOG_TRAFFIC);
enable(TestProperties.DUMP_ENTITY);
return configure(rc);
}
@Override
protected ResourceConfig configure(ResourceConfig rc) {
rc.property("contextConfigLocation", "spring.xml");
return rc;
}
@Test
public void test(){
final String hello = target("my/jersey/test")
.queryParam("systemId", 1)
.request()
.get(String.class);
System.out.println("==========\n" + hello);
}
}
7. 運行test(),即可看到結果。
E. auth返回狀態碼異常
throw new AuthException("ssCode","登錄錯了");
返回:
{
"error" : "ssCode",
"error_description" : "登錄錯了"
}
文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
86213 人正在系統學習中
打開CSDN,閱讀體驗更佳
springsecurity+oauth2+jwt實現單點吵備冊登錄demo
該資源是springsecurity+oauth2+jwt實現的單點登錄demo,模式為授權碼模式,實現自定義登錄頁面和自定義授權頁面。應用數據存在內存中或者存在資料庫中(附帶資料庫表結構),token存儲分為資料庫或者Redis。demo包含服務端和客戶端,可直接運行測試。
Spring Security OAuth2 認證伺服器自定義異常處理
認證伺服器默認返回的數據格式如下: { "error": "unsupported_grant_type", "error_description": "Unsupported grant type: password1" } 上面的返回結果很不友好,而且前端代碼也很難判斷是什麼錯誤,所以我們需要對返回的錯誤進行統一的異常處理 1.默認的異常處理器 默認情況是使用WebRespo...
繼續訪問
自定義spring security oauth /auth/token的返回內容格式
場景 在前後端分離的項目中,一般後端返回給前端的格式是一個固定的json格式。 在這個前提下,spring security oauth 生成access token的請求/auth/token的返回內容就需要自定義 原返回值 我們希望使用我們自己固定的json格式 需求 我們的BaseResponse類 public class BaseResponse { pri...
繼續訪問
Spring Security OAuth2模塊/oauth/token授權介面自定義返回結果
spring security提供了默認的oauth登錄授權升宏介面/oauth/token,該介面位於org.springframework.security.oauth2.provider.endpoint包中的TokenEndpoint類。 公司要實現自定義的登錄授權介面,且返回值滾型也要實現私有結構,下面大概講一下怎麼改造這個類來實現要求的業務邏輯。 一、利用Spring AOP方式 二、自定義Controller介面實現 簡單粗暴,直接把TokenEndpointer類注入到自定義Controller中;
繼續訪問
Spring Security Oauth2 自定義異常返回信息
開頭引用 https://my.oschina.net/merryyou/blog/1819572 在使用Spring Security Oauth2登錄和鑒權失敗時,默認返回的異常信息如下 { "error": "unauthorized", "error_description": "Full authentication is required to access this r...
繼續訪問
oauth2.0源碼分析之oauth/token申請令牌
本期介紹的是在oauth2.0中 , 通過調用oauth/token介面 , 框架是如何給我們申請到JWT令牌的 , 內部做了些什麼事情 ? 在分析源碼之前 , 我們首先需要知道的是我們需要具備哪些調試條件 , 不然會發現許多奇奇怪怪的錯誤 (比如通過/oauth/token時出現401) 1.一張oauth2.0的內置表(oauth_client_details) 注意:這里的密碼需要用Bcript加密 , 因為源碼內部是用Bcript解密的 2.兩把鑰匙: 一本是後綴為jks的私鑰 另一本是後綴為k
繼續訪問
SpringSecurity+OAuth2認證/oauth/token登錄報錯There is no client authentication
報錯信息: { "error": "unauthorized", "error_description": "There is no client authentication. Try adding an appropriate authentication filter." } 找到這個問題原因後,發現自己被自己蠢哭了。 在自己的核心配置類里,把這個/oauth/token加入到忽...
繼續訪問
spring security+Oauth2密碼模式認證時,報401,Unauthorized的問題排查
第一種情況: 進行 /auth/token的post請求時,沒有進行httpbasic認證。 什麼是http Basic認證? http協議的一種認證方式,將客戶端id和客戶端密碼按照「客戶端ID:客戶端密碼」的格式拼接,並用base64編碼,放在 header中請求服務端。例子如下: Authorization:Basic ASDLKFALDSFAJSLDFKLASD= ASDLKFALDSFAJSLDFKLASD= 就是 客戶端ID:客戶端密碼 的64編碼 springsecurity中的...
繼續訪問
最新發布 SpringBoot使用SpringSecurity,使用oauth2登錄,使用自定義/uaa/oauth/token報錯解決
SpringBoot使用SpringSecurity,使用oauth2登錄,使用自定義/uaa/oauth/token報錯解決
繼續訪問
asp.net WebAPI OWIN OAuth2.0授權自定義返回結果及錯誤或異常問題處理辦法
asp.net WebAPI OWIN OAuth2.0授權自定義返回結果及錯誤或異常問題處理核心代碼,詳情: https://www.cnblogs.com/wgx0428/p/12315546.html
ASP.NET WebAPI Token JWT Bearer 認證失敗和成功返回自定義數據 Json
asp.net WebAPI Token Oauth2.0授權自定義返回結果(包括登錄正確返回,登錄失敗返回)。 詳細參考:https://blog.csdn.net/u013546115/article/details/105580532
Spring Security OAuth2 token許可權隔離實例解析
主要介紹了Spring Security OAuth2 token許可權隔離實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
spring security oauth其中的/oauth/token做了哪些
項目場景: 問題描述: 提示:這里描述項目中遇到的問題: 例如:數據傳輸過程中數據不時出現丟失的情況,偶爾會丟失一部分數據 APP 中接收數據代碼: 原因分析: 提示:這里填寫問題的分析: 例如:Handler 發送消息有兩種方式,分別是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式當數據量過大時,由於 MessageQuene 大小也有限,所以當 message 處理不及時時,會造成先傳的數據被覆蓋,進而.
繼續訪問
Spring Security OAuth2 自定義 token Exception
https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/spring-security-OAuth208.png 1. 前言 在使用Spring Security Oauth2登錄和鑒權失敗時,默認返回的異常信息如下 { "error": "unauthorized", "error_description": "Full authentication is required to
繼續訪問
前後端分離 token過期 返回狀態碼
1.首先配置Mvc配置文件類 @Configuration public class BackendConfiguration extends WebMvcConfigurationSupport { @Autowired private LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { regi
繼續訪問
SpringSecurityOAuth2(2)請求攜帶客戶端信息校驗,自定義異常返回,無權處理,token失效處理...
上文地址:SpringSecurityOAuth2(1)(password,authorization_code,refresh_token,client_credentials)獲取token 上一篇博客寫了一個至簡的OAuth2的token認證伺服器,只實現了4種獲取token的方式 ,對...
繼續訪問
oauth2.0自定義token失效返回信息
oauth2.0自定義token失效返回信息 一、問題 由於spring security oauth2返回的失效信息對於客戶端不太有好,在網上找了自定義的解決方案以便更優雅的展示返回信息。 重寫框架里的方法,實現自定義。 二、配置類 Oauth2ResourceServer extends @Override public void configure( reso
繼續訪問
熱門推薦 解決Spring Security OAuth在訪問/oauth/token時候報401 authentication is required
先來張圖片 我在用psotman 測試oauth授權碼模式的出現了401的異常, 就是調用oauth/token. 我是想用code換token,但是發現報錯了。這是為什麼呢? 首先你要理解 /oauth/token 這個如果配置支持的,且url中有client_...
繼續訪問
spring security 和OAuth2 整合訪問 localhost:8082/oauth/token 報401的問題,或者403的問題
@Bean public PasswordEncoder passwordEncoder() { /** * 采坑 * spring-boot2 之後廢棄了MD5,使用BCryptPasswordEncoder()加密; * */ return new BCryptPasswordEncoder(); } 注意在security的配置內中,要使用BCryptPasswordEncoder 加密,..
繼續訪問
資料庫課程設計
c語言文件讀寫操作代碼
html+css+js網頁設計