Когда я добавляю org.springframework.web.filter.DelegatingFilterProxy в web.xml, я не могу получить доступ к Spring API из Angular UI, но когда я удаляю, я могу получить доступ (но я могу получить доступ к API и получитьответ с использованием базовой аутентификации в почтальоне) Я добавил пользовательский фильтр.Ниже приведены настройки
Web.xml
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.config.CustomFilter</filter-class>
</filter>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CustomFilter Class
public class CustomFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers",
"authorization, content-type, xsrf-token, Cache-Control, remember-me, WWW-Authenticate");
response.addHeader("Access-Control-Expose-Headers", "xsrf-token");
chain.doFilter(request, response);
}
public void destroy() {}
}
Из углового запроса вызова API
getMenu(){
const endpoint = 'http://localhost:8080/getAllProducts';
const headers = new HttpHeaders({Authorization: 'Basic ' + btoa('******@gmail.com:*****')});
return this.http.get<any>(endpoint,{headers});
}
ApplicationContextXML для весенней безопасности
<!-- Spring - Security Purpose -->
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/index/**"
access="permitAll" />
<security:intercept-url pattern="/index1/**"
access="permitAll" />
<security:intercept-url pattern="/cart/**"
access="permitAll" />
<security:intercept-url pattern="/get*/**"
access="hasAnyRole('ROLE_ADMIN','ROLE_USER')" />
<security:intercept-url pattern="/admin*/**"
access="hasRole('ROLE_ADMIN')" />
<security:form-login login-page="/login"
authentication-failure-url="/login?error" default-target-url="/index1"
username-parameter="j_username"
password-parameter="j_password" />
<security:logout logout-success-url="/login?logout" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<!-- <security:user-service> -->
<!-- <security:user name="ismail@gmail.com" password="12345" -->
<!-- authorities="ROLE_USER" /> -->
<!-- <security:user name="ajmal@gmail.com" password="54321" -->
<!-- authorities="ROLE_ADMIN" /> -->
<!-- </security:user-service> -->
<security:jdbc-user-service
data-source-ref="dataSource"
authorities-by-username-query="SELECT
emailId,authorities FROM authorities WHERE emailId =?"
users-by-username-query="SELECT
emailId, password, enabled FROM users WHERE emailId=? " />
</security:authentication-provider>
</security:authentication-manager>
Доступ к XMLHttpRequest по адресу http://localhost:8080/getAllProducts' от источника 'http://localhost:4200' заблокирован политикой CORS: Ответ на запрос предполетной проверки не пропускает доступконтрольная проверка: перенаправление не разрешено для предварительного запроса.