提交 c2819106 编写于 作者: Z Zhelyazko Chobantonov

UpdateValve needs to execute manager.store only once at the end of the request #2084

上级 d3acc024
......@@ -31,6 +31,7 @@ import org.apache.catalina.valves.ValveBase;
*/
public class UpdateValve extends ValveBase {
private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE";
private final RedissonSessionManager manager;
public UpdateValve(RedissonSessionManager manager) {
......@@ -40,17 +41,24 @@ public class UpdateValve extends ValveBase {
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {
try {
getNext().invoke(request, response);
} finally {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//check if we already filtered/processed this request
if (request.getNote(ALREADY_FILTERED_NOTE) == null) {
request.setNote(ALREADY_FILTERED_NOTE, Boolean.TRUE);
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
getNext().invoke(request, response);
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
request.removeNote(ALREADY_FILTERED_NOTE);
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
}
}
} else {
getNext().invoke(request, response);
}
}
......
......@@ -31,6 +31,7 @@ import org.apache.catalina.valves.ValveBase;
*/
public class UpdateValve extends ValveBase {
private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE";
private final RedissonSessionManager manager;
public UpdateValve(RedissonSessionManager manager) {
......@@ -40,17 +41,24 @@ public class UpdateValve extends ValveBase {
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {
try {
getNext().invoke(request, response);
} finally {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//check if we already filtered/processed this request
if (request.getNote(ALREADY_FILTERED_NOTE) == null) {
request.setNote(ALREADY_FILTERED_NOTE, Boolean.TRUE);
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
getNext().invoke(request, response);
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
request.removeNote(ALREADY_FILTERED_NOTE);
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
}
}
} else {
getNext().invoke(request, response);
}
}
......
......@@ -31,6 +31,7 @@ import org.apache.catalina.valves.ValveBase;
*/
public class UpdateValve extends ValveBase {
private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE";
private final RedissonSessionManager manager;
public UpdateValve(RedissonSessionManager manager) {
......@@ -40,17 +41,24 @@ public class UpdateValve extends ValveBase {
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {
try {
getNext().invoke(request, response);
} finally {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//check if we already filtered/processed this request
if (request.getNote(ALREADY_FILTERED_NOTE) == null) {
request.setNote(ALREADY_FILTERED_NOTE, Boolean.TRUE);
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
getNext().invoke(request, response);
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
request.removeNote(ALREADY_FILTERED_NOTE);
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
}
}
} else {
getNext().invoke(request, response);
}
}
......
......@@ -31,6 +31,7 @@ import org.apache.catalina.valves.ValveBase;
*/
public class UpdateValve extends ValveBase {
private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE";
private final RedissonSessionManager manager;
public UpdateValve(RedissonSessionManager manager) {
......@@ -40,17 +41,24 @@ public class UpdateValve extends ValveBase {
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {
try {
getNext().invoke(request, response);
} finally {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//check if we already filtered/processed this request
if (request.getNote(ALREADY_FILTERED_NOTE) == null) {
request.setNote(ALREADY_FILTERED_NOTE, Boolean.TRUE);
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
getNext().invoke(request, response);
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
request.removeNote(ALREADY_FILTERED_NOTE);
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader();
Thread.currentThread().setContextClassLoader(applicationClassLoader);
manager.store(request.getSession(false));
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
}
}
} else {
getNext().invoke(request, response);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册