Настраиваю Spring Security и столкнулся с проблемой когда в конфигурации указано доступ к определенным адресам предоставлять только при авторизации все равно можно обратится к ним без авторизации.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.anyRequest().authenticated();
}
}
@RestController
public class TestController {
@PostMapping(value = "/test")
public List<String> postHello(@RequestBody ArrayList<String> strings){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return strings
.stream()
.map(s -> "Print "+s)
.collect(Collectors.toList());
}
}
При такой конфигурации я отправлю запрос на http://localhost:8080/test в тело запроса помещаю ["one","two"]
и ожидаю что запрос не пройдет так как в настройках Spring Security я указал, что все пути должны проходить проверку авторизации anyRequest().authenticated()
.
После просмотра гугла я увидел, что возможно проблема заключается в том, что в web.xml
нет настроек фильтра.
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>springSecurityFilterChain</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
После добавления фильтра я получаю ошибку что нет такого бина springSecurityFilterChain
. Иду добавлять бин в конфиг...
<bean
id="springSecurityFilterChain"
class="org.springframework.web.filter.DelegatingFilterProxy"/>
Сервер стратует нормально, но стоит отправить запрос как получаю следующую ошибку:
javax.servlet.ServletException: Filter execution threw an exception
java.lang.StackOverflowError
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
...
...
Не могу понять, что именно я делаю не так. Возможно этот фильтр вообще не нужен и нужно лишь подправить конфиги. Если кто то уже сталкивался с такой проблемой буду благодарен за помощь.
build.gradle
application-context.xml
dispatcher-servlet.xml
web.xml
Нашел по какой причине не запускался фильтр DelegatingFilterProxy
.
Проблема была в том что dispatcher-servlet.xml
был не прописан в web.xml
.
После добавления в web.xml
следующего блока, все заработало корректно:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml /WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Использую такую конструкцию для преобразования ArrayList list в *csw файл, для дальнейшей отправки его через Gmail, etc
Здравствуйте, у меня есть сервлет который работает и все отображаетОн примерно такой
Добрый деньВ коде имеется final String, содержание которой очень не хотелось бы, чтобы его узнали при декомпиляции