Ale*_*sel 6 xml spring jsp spring-mvc spring-boot
我有一个使用spring xml的遗留应用程序,我正在迁移到spring-boot.
应用程序启动,我获得了身份验证页面,映射到applicationContext-login.xml中.在登录成功时,它应该加载WEB-INF/client/home.jsp,但是,它尝试加载/WEB-INF/auth/home.jsp,我得到404.在启动日志中,我看到它映射所有路径.为什么在这些重定向上存在冲突,我该怎么做才能解决这个问题?由于多个包含视图解析器的@ImportResource会遇到问题吗?
从安全性http配置中提取:
<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>
Run Code Online (Sandbox Code Playgroud)
它指向的控制器:
@RequestMapping(value = "/defaultEntry", method = RequestMethod.GET)
public String defaultEntry() {
if (authentication.isAuthenticated()) {
return "redirect:/client/home";
} else {
return "redirect:login";
}
}
Run Code Online (Sandbox Code Playgroud)
该应用程序在xml文件中配置了多个视图解析器:
类路径*:/ 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>
Run Code Online (Sandbox Code Playgroud)
类路径*:/ 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>
Run Code Online (Sandbox Code Playgroud)还有一些其他人遵循相同的配置模式.
我正在加载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
}
Run Code Online (Sandbox Code Playgroud)
您将从登录屏幕返回,redirect:/client/home
该屏幕将由您的 loginViewResolver 处理:
<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>
Run Code Online (Sandbox Code Playgroud)
clientViewResolver 不会被调用,因为视图解析器上没有指定顺序。您可以使用 order 属性设置顺序。,
归档时间: |
|
查看次数: |
757 次 |
最近记录: |