С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789

Как подключить Spring Security c минимальными настройками

18.04.2019, 13:55. Показов 679. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня основной код написан только на Java configs.

Конфигурационные файлы

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
@Import(value = {ServiceConfiguration.class,
        MailConfig.class, RestConfiguration.class})
 
@Configuration
@EnableWebMvc
@ComponentScan("com.skillsimprover.spring.data.web.controllers")
public class MvcConfiguration implements WebMvcConfigurer {
 
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/pages/");
        viewResolver.setSuffix(".jsp");
 
        return viewResolver;
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static-content/**").addResourceLocations("/static-content/");
    }
}
 
 
@Configuration
@ComponentScan("com.skillsimprover.spring.data.rest")
public class RestConfiguration {
    
}
 
 
@Import(DaoConfiguration.class)
 
@Configuration
@ComponentScan(basePackages = "com.skillsimprover.spring.data.service.impl")
@EnableTransactionManagement
public class ServiceConfiguration {
 
    private static final String DOZER_MAPPING_FILES_TEMPLATE = "classpath*:/dozer/mappings/*_mapping.xml";
 
    @Bean
    public DozerBeanMapperFactoryBean dozerMapper(@Value(DOZER_MAPPING_FILES_TEMPLATE) Resource[] mappingFiles) {
        DozerBeanMapperFactoryBean dozerMapper = new DozerBeanMapperFactoryBean();
        dozerMapper.setMappingFiles(mappingFiles);
 
        return dozerMapper;
    }
 
@Configuration
@PropertySource(value = {"classpath:mail/mail.properties"})
@ComponentScans({
        @ComponentScan("com.skillsimprover.spring.data.mail")
})
 
public class MailConfig {
 
    private final static String MAIL_TRANSPORT_PROTOCOL = "mail.transport.protocol";
    private final static String SMTP = "smtp";
    private final static String MAIL_SMTP_AUTH = "mail.smtp.auth";
    private final static String MAIL_SMTP_STARTTLS_ENABLE = "mail.smtp.starttls.enable";
    private final static String MAIL_DEBUG = "mail.debug";
    private final static String TRUE = "true";
    private final static String SOCKET_FACTORY = "mail.smtp.socketFactory.class";
 
    private final Environment env;
 
    @Autowired
    public MailConfig(Environment env) {
        this.env = env;
 
    }
 
    @Bean
    public JavaMailSender getJavaMailSender(){
 
        final String host = this.env.getProperty("spring.mail.host");
        final Integer port = Integer.valueOf(this.env.getProperty("spring.mail.port"));
        final String userName = this.env.getProperty("spring.mail.username");
        final String password = this.env.getProperty("spring.mail.password");
        final String smptAuth = this.env.getProperty("spring.mail.properties.mail.smtp.auth");
        final String smtpStarttlsEnable = this.env.getProperty("spring.mail.properties.mail.smtp.starttls.enable");
        final String sslSocketFactory = this.env.getProperty("spring.mail.javax.net.ssl.SSLSocketFactory");
 
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(host);
        mailSender.setPort(port);
 
        mailSender.setUsername(userName);
        mailSender.setPassword(password);
 
        Properties props = mailSender.getJavaMailProperties();
        props.put(MAIL_TRANSPORT_PROTOCOL, SMTP);
        props.put(MAIL_SMTP_AUTH, smptAuth);
        props.put(MAIL_SMTP_STARTTLS_ENABLE, smtpStarttlsEnable);
        props.put(MAIL_DEBUG, TRUE);
        props.put(SOCKET_FACTORY,sslSocketFactory);
 
        return mailSender;
    }
}
 
@PropertySource(value = {"classpath:jdbc/jdbc.properties"})
@Configuration
@ComponentScans({
        @ComponentScan("com.skillsimprover.spring.data.dao")
})
@EnableJpaRepositories("com.skillsimprover.spring.data.dao")
public class DaoConfiguration {
 
    private final Environment env;
 
    @Autowired
    public DaoConfiguration(Environment env) {
        this.env = env;
    }
 
    @SuppressWarnings("ContextJavaBeanUnresolvedMethodsInspection")
    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
 
        BasicDataSource dataSource = new BasicDataSource();
 
        @NotEmpty
        String propertyDriverMySql = env.getProperty("jdbc.driverClassName");
 
        @NotEmpty
        String propertyUrl = env.getProperty("jdbc.url");
 
        @NotEmpty
        String propertyUserName = env.getProperty("jdbc.username");
 
        @NotEmpty
        String propertyPassword = env.getProperty("jdbc.password");
 
        dataSource.setDriverClassName(propertyDriverMySql);
        dataSource.setUrl(propertyUrl);
        dataSource.setUsername(propertyUserName);
        dataSource.setPassword(propertyPassword);
 
 
        dataSource.setMaxConnLifetimeMillis(1);
        dataSource.setMaxIdle(25);
        dataSource.setInitialSize(5);
        dataSource.setValidationQuery("SELECT 1");
 
        return dataSource;
 
    }
 
 
/*  @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/events_db");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
 
        return dataSource;
    }*/
 
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setDatabasePlatform("MYSQL");
        adapter.setShowSql(true);
        adapter.setDatabasePlatform("org.hibernate.dialect.MySQL8Dialect");
 
        return adapter;
    } 
 
    @Bean
    public AbstractEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
                                                                 JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory =
                new LocalContainerEntityManagerFactoryBean();
 
        entityManagerFactory.setPackagesToScan("com.skillsimprover.spring.data.dao.entities");
        entityManagerFactory.setDataSource(dataSource);
        entityManagerFactory.setJpaVendorAdapter(jpaVendorAdapter);
        entityManagerFactory.setJpaProperties(additionalJpaProperties());
 
        return entityManagerFactory;
    } 
 
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        
        return transactionManager;
    }
 
    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
        return new PersistenceExceptionTranslationPostProcessor();
    }
 
 
    private Properties additionalJpaProperties() {
        Properties properties = new Properties();
 
        properties.setProperty("hibernate.format_sql", "true");
 
        return properties;
    }
}



инициализатор

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class MvcInitializer implements WebApplicationInitializer {
 
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
 
        AnnotationConfigWebApplicationContext webApplicationContext
                = new AnnotationConfigWebApplicationContext();
 
        webApplicationContext.register(MvcConfiguration.class);
 
        servletContext.addListener(new ContextLoaderListener(webApplicationContext));
 
        webApplicationContext.setServletContext(servletContext);
 
        DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext);
 
        ServletRegistration.Dynamic servlet =
                servletContext.addServlet("dispatcher", dispatcherServlet);
 
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
 
        EnumSet<DispatcherType> dispatcherTypes = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD);
 
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
 
        FilterRegistration.Dynamic characterEncodingFilterDinamyc =
                servletContext.addFilter("encodingFilter", characterEncodingFilter);
 
        characterEncodingFilterDinamyc.setInitParameter("encoding", "UTF-8");
        characterEncodingFilterDinamyc.setInitParameter("forceEncoding", "true");
        characterEncodingFilterDinamyc.addMappingForUrlPatterns(dispatcherTypes, true, "/*");
 
    }
}


web.xml


Кликните здесь для просмотра всего текста
XML
1
web.xml



security-config.xml

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security.xsd">
 
    <security:http auto-config="true">
        <security:intercept-url pattern="/**" access="isAuthenticated()" />
    </security:http>
 
</beans>


Это минимальные настройки, нужные для запуска Spring Security из коробки.

Но получаю ошибку

org.springframework.beans.factory.NoSuch BeanDefinitionException: No bean named 'springSecurityFilterChain' available
Во время создания Application context не создаются нужные компоненты.

Я так полагают нужно конфигурационные файлы, расположенные в WEB-INF - зарегистрировать, но где и как ?

Что еще нужно дописать ?

Сразу говорю - это учебный пример (даже если это и непарвильно что существует конфигурация на java и на xml ).
Я понимаю, что нужно программировать в едином стиле, но в данный момент хотелось бы понять как решить данную задачу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2019, 13:55
Ответы с готовыми решениями:

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Как получить доступ к Spring Security из jsp?
Везде предлагают &lt;%@ taglib prefix=&quot;sec&quot; uri=&quot;http://www.springframework.org/security/tags&quot; %&gt;, но ссылка не работает. Вариант передавать...

Spring Security Как реализовать login контроллер
При аутентификации пользователя я получаю куки, который я использую для авторизации и дальнейшего использования некоторых контроллеров....

2
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
18.04.2019, 14:26  [ТС]
Я пробовал импортировать вот так

Java
1
2
3
4
5
6
7
8
9
10
11
12
@Import(value = {ServiceConfiguration.class,
        MailConfig.class, RestConfiguration.class})
@ImportResource("/WEB-INF/security-config.xml")
@Configuration
@EnableWebMvc
@ComponentScan("com.skillsimprover.spring.data.web.controllers")
public class MvcConfiguration implements WebMvcConfigurer {
 
    @Bean
    public ViewResolver viewResolver() {
 
..........
я изменил security-config.xml и добавил

XML
1
2
3
4
5
6
7
8
9
<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <user name = "ivan" password="123" authorities="ROLE_ADMIN" />
            <user name = "petr" password="123" authorities="ROLE_USER" />
            <user name = "sidor" password="123" authorities="ROLE_ADMIN, ROLE_USER" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>
но не могу сконфигурировать из ошбики, которая появляется уже на этапе компиляции, что атрибут user - не разрешен здесь ???
Миниатюры
Как подключить Spring Security c минимальными настройками  
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
18.04.2019, 15:32  [ТС]
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
 
    <welcome-file-list>
        <welcome-file>index</welcome-file>
    </welcome-file-list>
    
    <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>
 
</web-app>

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       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.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-4.2.xsd">
 
<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
 
<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="ivan" password="123" authorities="ROLE_ADMIN" />
            <security:user name="petr" password="123" authorities="ROLE_USER" />
            <security:user name = "sidor" password="123" authorities="ROLE_ADMIN, ROLE_USER" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>
 
 
</beans>
решено
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2019, 15:32
Помогаю со студенческими работами здесь

Spring. Тесты и Spring-security
Вопрос из области почему так. Есть у меня такой вот тест: @ContextConfiguration(locations =...

Spring Security, как обеспечить доступ к персональным страницам только их владельцу
Есть пользователь пользователь может владеть несколькими заведениями, а может не владеть ни одним. Вопрос в том как настроить intercept-url...

Существует ли security struct или wicket для регистрации и авторизации пользователей, как в spring?
существует security struct или wicket для регистрации и авторизации пользователей как в spring?

Spring security c 3 на 4
Не знаю почему, но после того, как перешел на spring security 4 возникает проблема. Захожу на страницу логина, ввожу имя и пароль....

Spring security
Пытаюсь сделать spring MVC + spring security. При запуске пишет Type Exception Report Message No bean named 'springSecurityFilterChain'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru