Spring Защищенный пользовательский фильтр (сменить пароль). Spring фильтр


java - Как добавить класс фильтра в Spring Boot?

ОБНОВЛЕНИЕ: 2017-12-16:

Есть два простых способа сделать это в Spring boot 1.5.8.RELEASE, не требуется xml.

Первый способ: Если у вас нет пространственного шаблона url, вы можете использовать @Component вот так. Полный код и подробная информация приведены здесь https://www.surasint.com/spring-boot-filter/

@Component public class ExampleFilter implements Filter{ ... }

Второй способ: Если вы хотите использовать шаблон url, вы можете использовать @WebFilter, как это. Полный код и подробная информация приведены здесь https://www.surasint.com/spring-boot-filter-urlpattern/

@WebFilter(urlPatterns = "/api/count") public class ExampleFilter implements Filter{ ... }

Но вам нужно добавить эту аннотацию @ServletComponentScan в свой класс Spring Boot Application.

@ServletComponentScan @SpringBootApplication public class MyApplication extends SpringBootServletInitializer { ... }

Обратите внимание, что @Component - это Spring аннотация, но @WebFilter нет. @WebFiler - аннотирование сервлета 3.

В обоих случаях вам нужна базовая зависимость загрузки Spring в pom.xml(нет необходимости в явном ядре tomcat)

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent> <groupId>com.surasint.example</groupId> <artifactId>spring-boot-04</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

qaru.site

spring - Spring Защищенный пользовательский фильтр (сменить пароль)

Немного поздно, но, надеюсь, это может помочь другим найти эту ссылку. Если вы используете пользовательский UserDetailsService, вы можете установить учетные данные объекта UserNonExpired на false, например, чтобы не разрешать доступ к любому защищенному контенту, пока это поле не вернется к истинному.

В принципе, когда у вас есть срок действия пароля, вы установите поле в своей модели пользователя (возможно, passwordExpired), и когда пользователь UserDetailsService вытащит пользователя, ваш UserDetailsService будет использовать это значение для установки учетных данныхNonExpired.

Затем все, что вам нужно сделать, это добавить некоторую конфигурацию в ваш applicationContext-security.xml для настройки сопоставлений исключений аутентификации. Это позволит вам поймать исключение, занесенное с истекшими учетными данными, и заставить пользователя перейти на страницу пароля reset. Вы можете дополнительно заблокировать заблокированные и отключенные учетные записи, используя аналогичный метод. Пример конфигурации приведен ниже:

ApplicationContext-security.xml

<beans:bean> <beans:property name="exceptionMappings"> <beans:props> <beans:prop key="org.springframework.security.authentication.BadCredentialsException">/login_error</beans:prop> <beans:prop key="org.springframework.security.authentication.CredentialsExpiredException">/password_expired</beans:prop> <beans:prop key="org.springframework.security.authentication.LockedException">/locked</beans:prop> <beans:prop key="org.springframework.secuirty.authentication.DisabledException">/disabled</beans:prop> </beans:props> </beans:property> </beans:bean> <http use-expressions="true"> <!-- ADD BLACKLIST/WHITELIST URL MAPPING --> <form-login login-page="/login" default-target-url="/" authentication-failure-handler-ref="exceptionTranslationFilter" /> </http>

Затем просто убедитесь, что вы настроили свои контроллеры для обслуживания этих ссылок с соответствующим контентом.

qaru.site

spring - Как создать собственный фильтр безопасности для микросервисов с помощью Spring Безопасность

Немного непонятно, что вы спрашиваете: из вашего изображения все микросервисы будут находиться в одном и том же веб-приложении, настроенном из того же web.xml, но ваш фрагмент кода указывает, что ваши микросервисы будут находиться в отдельных веб-приложениях, что действительно имело бы общий смысл.

В любом случае: просто добавьте контекст корневого приложения в ваш web.xml, где вы указываете конфигурацию безопасности:

<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/common-security-config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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>

common-security-config.xml будет базовым контекстом приложения для ВСЕХ контекстов дочерних приложений в одном и том же веб-приложении (в вашем случае: все микросервисы и т.д.). Разместите свою конфигурацию безопасности Spring там, и все будет в порядке.

Если все ваши микросервисы находятся в одном и том же веб-приложении, это все, что вам нужно сделать; если нет, просто создайте общий модуль, который включает конфигурацию безопасности (в src/main/resources) и любые вспомогательные классы, которые могут потребоваться для конфигурации безопасности. Добавьте ссылку на этот модуль и добавьте общую конфигурацию в web.xml всех модулей микросервиса.

Обратите внимание, что в любом случае, если вы хотите использовать защиту уровня метода (например, @Secured), эта конфигурация должна быть включена в конфигурацию для каждого дочернего микросервиса.

qaru.site

java - Spring: Исходный стартовый фильтр springSecurityFilterChain

Я пытаюсь написать приложение с помощью Spring 3.1.2-Release. Сервер приложений Tomcat 7. Когда я запускаю сервер, я получаю эту ошибку:

SEVERE: Исходный стартовый фильтр springSecurityFilterChain org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет

bean с именем 'springSecurityFilterChain' определяется в org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553)   в org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)   в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)   в org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)   в org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1102)

Вот мои файлы конфигурации:

web.xml <display-name>myTest</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <context-param> <param-name>defaultHtmlEscape</param-name> <param-value>true</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </listener> <!-- Processes application requests --> <servlet> <servlet-name>springTest</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springTest</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <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>

Это root-context.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd"> <context:annotation-config /> <context:component-scan base-package="com.myTest.db.entities"/> <context:component-scan base-package="com.myTest.services"/> <context:component-scan base-package="com.myTest.web"/> <import resource="mvc-config.xml" />

Это

security-config.xml <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <!-- Additional filter chain for normal users, matching all other requests --> <http pattern="/resources/**" security="none" /> <http use-expressions="true"> <intercept-url pattern="/login" access='isAnonymous()' requires-channel='http' /> <intercept-url pattern="/" access='permitAll' requires-channel='http'/> <intercept-url pattern='/**' access='isAuthenticated()' requires-channel='http'/> <form-login login-page="/login" authentication-failure-url="/login" default-target-url="/welcome" /> <access-denied-handler ref="accessDeniedHandler" /> <logout logout-url="/logout" logout-success-url="/" /> </http> <beans:bean> <beans:property name="errorPage" value="/WEB-INF/pages/error.jsp"/> </beans:bean> <authentication-manager> <authentication-provider user-service-ref="userAuthenticationService"> <password-encoder hash="sha-256"> <salt-source user-property="salt" /> </password-encoder> </authentication-provider> </authentication-manager> <!-- User Detail Services --> <beans:bean />

Любые идеи?

задан D.R. 12 апр. '13 в 18:35 источник поделиться

qaru.site