Deseo recibir cierta información por solicitud, por lo que creo que en lugar de tener una función para cada solicitud y obtener esa información de las solicitudes por separado, es mejor tener un filtro.
Entonces, cada solicitud pasará ese filtro y yo obtendré lo que quiero.
La pregunta es: ¿cómo puedo escribir un filtro personalizado?
Supongamos que no es como cualquier filtro de seguridad de spring predefinido y es totalmente nuevo.
Puede usar el filtro estándar de Java. Simplemente colóquelo después del filtro de autenticación en web.xml (esto significa que irá más adelante en la cadena de filtros y se llamará después de la cadena de filtros de seguridad).
public class CustomFilter implements Filter{ @Override public void destroy() { // Do nothing } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Set roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities()); if (roles.contains("ROLE_USER")) { request.getSession().setAttribute("myVale", "myvalue"); } chain.doFilter(req, res); } @Override public void init(FilterConfig arg0) throws ServletException { // Do nothing } }
Fragmento de web.xml:
springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* customFilter com.yourcompany.test.CustomFilter customFilter /VacationsManager.jsp
También puede agregar el controlador que se invocará después de iniciar sesión correctamente (debe extender SavedRequestAwareAuthenticationSuccessHandler ). Mira aquí cómo hacer esto. Y creo que esta es una idea aún mejor.
ACTUALIZADO:
O puede tener este filtro al final de sus filtros de seguridad como este:
Y para tener su filtro, puede usar esto:
public class MonitoringFilter extends GenericFilterBean{ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //Implement this Function to have your filter working }
Solo lanzando esto en la mezcla; ¿Qué hay de usar custom-filter
dentro del elemento http
:
...