Deseo recibir 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 primavera predefinido y es totalmente nuevo.¿Cómo escribir un filtro personalizado en la seguridad de primavera?
Respuesta
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<String> 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:
<!-- The Spring Security Filter Chain -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Your filter definition -->
<filter>
<filter-name>customFilter</filter-name>
<filter-class>com.yourcompany.test.CustomFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>customFilter</filter-name>
<url-pattern>/VacationsManager.jsp</url-pattern>
</filter-mapping>
también usted puede añadir manejador que se invocará Tras haberse identificado correctamente (lo que necesita para extender SavedRequestAwareAuthenticationSuccessHandler). Look here cómo hacer esto. Y creo que esta es una idea aún mejor.
ACTUALIZADO:
o puede hacer que este filtro al final de sus filtros de seguridad así:
<security:filter-chain-map>
<sec:filter-chain pattern="/**"
filters="
ConcurrentSessionFilterAdmin,
securityContextPersistenceFilter,
logoutFilterAdmin,
usernamePasswordAuthenticationFilterAdmin,
basicAuthenticationFilterAdmin,
requestCacheAwareFilter,
securityContextHolderAwareRequestFilter,
anonymousAuthenticationFilter,
sessionManagementFilterAdmin,
exceptionTranslationFilter,
filterSecurityInterceptorAdmin,
MonitoringFilter"/> <!-- Your Filter at the End -->
</security:filter-chain-map>
Y tener su filtro, es posible utilizar este:
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
}
Sólo arrojando esto en la mezcla; ¿Y si uso custom-filter
dentro http
elemento:
<security:http auto-config="false" ...>
...
<security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" />
</security:http>
Esta es de lejos la mejor solución. Quería ejecutar mi propio filtro antes que todo:
- 1. primavera proveedor de autenticación LDAP personalizado de seguridad
- 2. Alternativas a la seguridad de primavera en Java (primavera)
- 3. Cambiar la configuración de seguridad de primavera
- 4. Cómo agregar un filtro personalizado después de que el usuario lo autorice en la aplicación de primavera
- 5. Spring Security filtro personalizado
- 6. Seguridad de primavera: ¿cómo restablezco SPRING_SECURITY_LAST_EXCEPTION.message?
- 7. Configuración de seguridad de primavera basada en código
- 8. ¿Cómo puedo probar un filtro ActionFilter personalizado en ASP.Net MVC
- 9. Cómo escribir personalizado ExpandableListAdapter
- 10. ¿Cómo filtro en un nivel personalizado en log4net?
- 11. Spring Security 3.0: ¿Cómo especifico las URL a las que se aplica un filtro personalizado?
- 12. Seguridad de primavera: cómo obtener la URL de destino inicial
- 13. proveedores múltiples de autenticación en la primavera de Seguridad
- 14. ¿Cómo escribir la etiqueta en mi proyecto de primavera?
- 15. añadir nuevos usuarios en la primavera de Seguridad
- 16. Seguridad de primavera + i18n = ¿cómo hacerlo funcionar juntos?
- 17. ¿Puedo tener múltiples contextos de seguridad con seguridad de primavera?
- 18. Primavera Seguridad y autenticación LDAP
- 19. Cómo escribir el filtro de spam
- 20. la seguridad de Primavera y sin forma de la conexión
- 21. primavera: Anotación equivalente de seguridad: autenticación de administrador y la seguridad:-método de seguridad global
- 22. Escribir un evento personalizado global en C#
- 23. Agregando un filtro personalizado a jinja2 bajo la pirámide
- 24. Seguridad de primavera y proxy AJP
- 25. tiempo de espera de la sesión de seguridad de primavera
- 26. Filtro jinja2 personalizado para el iterador
- 27. Cómo firmar un proveedor de seguridad JCE personalizado
- 28. Seguridad de primavera autenticar excepciones manejo
- 29. Seguridad de primavera: forzando https usando anotaciones?
- 30. Escribir un depurador de eclipse personalizado
Mientras esperaba la respuesta, se me ocurrió una solución. Agregué mi filtro ('GenericFilterBean' extendido) al final de mis filtros de seguridad. Está funcionando bien. Pero ahora, cuando vi tu respuesta, me parece mejor. Estoy probando tu solución. Espero que también funcione Te dejaré saber el resultado. Gracias. –
Generalmente tu respuesta es correcta, pero tengo que modificarla un poco. Gracias por tu ayuda. –
Ok. Modifique mi respuesta y aceptaré sus cambios. Me resultará interesante saber dónde me equivoqué. – dimas