Я пытаюсь создать свой первый весенний веб-проект, но я не хочу использовать jsp.Все, что я хочу использовать, это контроллер покоя, но я не смог передать даже первый запрос ("/"), который использует файл приветствия index.html (по умолчанию index.jsp).Я собираюсь вставить структуру папок и классы.
Это мой класс конфигурации приложения
package com.abs.sstest.security;
@Configuration
@ComponentScan
@EnableWebMvc
public class AppConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "index.html");
}
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
Это мой класс Init
package com.abs.sstest.security;
public class AppInit implements WebApplicationInitializer{
@Override
public void onStartup(ServletContext servletContext)
throws ServletException {
registerDispatcherServlet(servletContext);
}
private void registerDispatcherServlet(final ServletContext servletContext) {
WebApplicationContext dispatcherContext = createContext(AppConfig.class);
DispatcherServlet dispatcherServlet = new DispatcherServlet(dispatcherContext);
Dynamic dispatcher = servletContext.addServlet("dispatcher", dispatcherServlet);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
private WebApplicationContext createContext(final Class<?>... annotatedClasses) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(annotatedClasses);
return context;
}
}
Это мой класс securityconfig
package com.abs.sstest.security;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("bill").password("abc123").roles("USER");
auth.inMemoryAuthentication().withUser("admin").password("root123").roles("ADMIN");
auth.inMemoryAuthentication().withUser("dba").password("root123").roles("ADMIN","DBA");
}
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/","/home").permitAll()
.antMatchers("/admin/**").access("hasRole('ADMIN')")
.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
.and().formLogin()
.and().exceptionHandling().accessDeniedPage("/Access_Denied");
}
}
Этоэто моя безопасность init
package com.abs.sstest.security;
public class SecurityWebApplicationInitializer extends
AbstractSecurityWebApplicationInitializer {
}
Это моя структура папок Структура папок
Я вставил index.html в несколько папокпотому что я запутался, читая различные форумы.
Редактировать: Теперь я изменил свой класс conifg приложения
package com.abs.sstest.security;
@Configuration
@ComponentScan(basePackages = "com.abs.sstest")
@EnableWebMvc
public class AppConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "/index");
registry.addRedirectViewController("/login2", "/login2");
}
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
registry.addResourceHandler("/views/**").addResourceLocations("/WEB-INF/views/");
}
}
Класс init теперь намного проще
package com.websystique.springsecurity.configuration;
public class SpringMvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { HelloWorldConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
ИТеперь главное, что все мои html-файлы находятся в src / main / webapp / index.html
Но это привело к новой проблеме, теперь я должен вернуть даже расширение из контроллера.Например:
@RequestMapping(value = "/login2", method = RequestMethod.GET)
public String loginPage() {
return "login.html";//login doesn't work
}