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

pull/2085/head
Zhelyazko Chobantonov 6 years ago
parent d3acc0249b
commit c281910669

@ -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);
}
}

Loading…
Cancel
Save