Mam starszą aplikację przy użyciu źródłowego xml, który migruję do wiosennego rozruchu.rozruch wiosenny przy użyciu wielu rozpoznawania widoku z konfiguracji xml niepoprawnie przekierowujący
Aplikacja zostanie uruchomiona i otrzymam stronę uwierzytelnienia, zamapowaną w aplikacji applicationContext-login.xml. Po pomyślnym zalogowaniu powinien załadować WEB-INF/client/home.jsp, ale zamiast tego próbuje załadować /WEB-INF/auth/home.jsp i otrzymuję 404. W logu uruchamiania widzę to mapowanie wszystkich ścieżki. Dlaczego jest to sprzeczne w przypadku tych przekierowań i co mogę zrobić, aby to naprawić? Czy występują problemy z powodu wielu @ImportResource zawierających funkcje rozpoznawania widoku?
Wyciąg z konfiguracji http bezpieczeństwo:
<s:http use-expressions="true" entry-point-ref="delegatingAuthenticationEntryPoint">
<s:form-login login-page="/auth/login"
login-processing-url="/auth/j_spring_security_check"
authentication-failure-url="/auth/login-secure?loginFailed=true"
default-target-url="/auth/defaultEntry"/>
<s:logout logout-url="/auth/logout" logout-success-url="/auth/logout-success" delete-cookies="jsessionid"/>
</s:http>
Regulator wskazuje na:
@RequestMapping(value = "/defaultEntry", method = RequestMethod.GET)
public String defaultEntry() {
if (authentication.isAuthenticated()) {
return "redirect:/client/home";
} else {
return "redirect:login";
}
}
aplikacja ma wiele widok przeliczniki skonfigurowany w plikach XML:
ścieżki klasy *:/springContext/applicationContext-login.xml
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" default-init-method="init" default-destroy-method="destroy"> <import resource="applicationContext-web-common.xml" /> <!-- Static login resources --> <mvc:resources mapping="/css/**" location="/WEB-INF/auth/css/"/> <mvc:resources mapping="/assets/**" location="/WEB-INF/auth/assets/"/> <mvc:resources mapping="/js/**" location="/WEB-INF/auth/js/"/> <context:component-scan base-package="org.myCompany.auth" /> <!-- view resolver for JSP --> <bean id="loginViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/auth/"/> <property name="suffix" value=".jsp"/> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="defaultLocale" value="en_US"/> </bean>
classpath *:/springContext/ApplicationContext-client.xml”
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" default-init-method="init" default-destroy-method="destroy"> <import resource="applicationContext-web-common.xml" /> <context:component-scan base-package="org.myCompany.client" /> <!-- Static resources --> <mvc:resources mapping="/player/**" location="/WEB-INF/client/player/"/> <mvc:resources mapping="/css/**" location="/WEB-INF/client/css/"/> <mvc:resources mapping="/data/**" location="/WEB-INF/client/data/"/> <mvc:resources mapping="/js/**" location="/WEB-INF/client/js/"/> <mvc:resources mapping="/locales/**" location="/WEB-INF/client/locales/"/> <mvc:resources mapping="/media/**" location="/WEB-INF/client/media/"/> <mvc:resources mapping="/index.html" location="/WEB-INF/client/index.html"/> <mvc:resources mapping="/test.html" location="/WEB-INF/client/test.html"/> <mvc:resources mapping="/admin/**" location="/WEB-INF/client/admin/"/> <mvc:resources mapping="/documentation/**" location="/WEB-INF/client/documentation/"/> <bean id="clientViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/client/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
Istnieje również kilka innych, według tego samego wzorca konfiguracyjnego.
wczytuję zasobów w Application.java
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
//@EnableWebMvc
@ComponentScan({"org.myCompany"})
@ImportResource({"classpath*:/springContext/applicationContext-controllers.xml",
"classpath*:/springContext/applicationContext-rest.xml",
"classpath*:/springContext/applicationContext-login.xml",
"classpath*:/springContext/applicationContext-client.xml",
"classpath*:/springContext/applicationContext-admin.xml",
"classpath*:/springContext/applicationContext-logging.xml",
"classpath*:/springContext/applicationContext-web-common.xml"
})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(Application.class);
ApplicationContext ctx = app.run(args);
Environment env = ctx.getEnvironment();
logger.info(String.format("\n----------------------------------------------------------\n\t" +
"Application '%s' is running! Access URLs:\n\t" +
"Local: \t\thttp://localhost:%s\n\t" +
"External: \thttp://%s:%s\n----------------------------------------------------------",
env.getProperty("spring.application.name"),
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port")));
}
@Bean
public ServletRegistrationBean restDispatcher() {
ServletRegistrationBean registration = new ServletRegistrationBean(new DispatcherServlet(),
"/rest/*", "/websocket/*");
registration.setName("rest-dispatcher");
registration.setLoadOnStartup(2);
Map<String, String> params = new HashMap<>();
params.put("contextConfigLocation", "classpath*:springContext/applicationContext-rest.xml");
registration.setInitParameters(params);
return registration;
}
@Bean
public ServletRegistrationBean authDispatcher() {
ServletRegistrationBean registration = new ServletRegistrationBean(new DispatcherServlet(), "/auth/*");
registration.setName("auth-dispatcher");
registration.setLoadOnStartup(2);
Map<String, String> params = new HashMap<>();
params.put("contextConfigLocation", "classpath*:springContext/applicationContext-login.xml");
registration.setInitParameters(params);
return registration;
}
@Bean
public ServletRegistrationBean clientDispatcher() {
ServletRegistrationBean registration = new ServletRegistrationBean(new DispatcherServlet(), "/client/*");
registration.setName("client-dispatcher");
registration.setLoadOnStartup(2);
Map<String, String> params = new HashMap<>();
params.put("contextConfigLocation", "classpath*:springContext/applicationContext-client.xml");
registration.setInitParameters(params);
return registration;
}
//... other servlets registration, filters registration
}
Ale jak to wszystko działa dobrze na aplikacji Spring MVC? –
Jeśli nie określisz zamówienia, jego domyślna kolejność na obu - co oznacza, że jest pierwsza, nie jest przewidywalna, a więc może działać lub nie. – 6ton
Dodano zamówienie 1 do klienta i 2 do zalogowania. Teraz właśnie otrzymuję URL żądania: http: // localhost: 8000/client/home Metoda żądania: GET Kod stanu: 404 nie znaleziono –