[SPRING] Spring 4.x Java 코드 기반 구성 : 정적 리소스 파일 및 Dispatcher 서블릿 [duplicate]
SPRINGSpring 4.x Java 코드 기반 구성 : 정적 리소스 파일 및 Dispatcher 서블릿 [duplicate]
Servlet 버전 3.0 이전의 모든 구성은 XML 기반입니다. 현재 코드 / 주석 기반 구성을 사용하고 있습니다.
xml 스타일 구성에서 우리는
<mvc:resources mapping="/res/**" location="/res/" />
코드 기반 구성으로 변환하려면 어떻게해야합니까? 내가 eclipse 디버그 콘솔에서 리소스 파일에 대한 디스패처 서블릿을 찾을 수 없다는 오류가 발생합니다.
BTW, 나의 참고 자료, Spring Security 3.x에서 4.x 로의 마이그레이션 (Java Configuration)
이니셜 라이저
public class AppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { SecurityConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { MvcConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
mvc config
@EnableWebMvc
@ComponentScan({ "com.appname.controller" })
public class MvcConfig {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
}
보안 설정
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password")
.roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/res/**").permitAll()
.and().authorizeRequests()
.anyRequest().hasRole("USER")
.and().formLogin().loginPage("/account/signin").permitAll()
.and().logout().permitAll();
}
}
보안 이니셜 라이저
public class SecurityInitializer extends
AbstractSecurityWebApplicationInitializer {
}
사용자 정의 로그인
public class CustomUserDetailsService implements UserDetailsService {
private AccountRepository accountRepository;
public CustomUserDetailsService() {
this.accountRepository = new AccountRepository();
}
@Override
public UserDetails loadUserByUsername(String email)
throws UsernameNotFoundException {
Account account = accountRepository.getAccountByEmail(email);
if (account == null) {
throw new UsernameNotFoundException("Invalid email/password.");
}
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("USER"));
return new User(account.getEmail(), account.getPassword(), authorities);
}
}
해결법
-
==============================
1.WebMvcConfigurerAdapter에서 확장하고 addResourceHandlers 메서드를 재정의 할 수 있습니다.
WebMvcConfigurerAdapter에서 확장하고 addResourceHandlers 메서드를 재정의 할 수 있습니다.
@EnableWebMvc @ComponentScan({"com.appname.controller"}) public class MvcConfig extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/jsp/"); resolver.setSuffix(".jsp"); return resolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry .addResourceHandler("/res/**") .addResourceLocations("/res/"); } }
from https://stackoverflow.com/questions/29515202/spring-4-x-java-code-based-configuration-static-resource-files-and-dispatcher-s by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 MVC 컨트롤러에 JSON 배열 전달하기 (0) | 2019.02.28 |
---|---|
[SPRING] Strut 2.3.1.2 유닛 테스트, getContext ()를 사용하여 NPE와 Spring 코드를 제거하는 법 (0) | 2019.02.28 |
[SPRING] ArrayOutOfBoundsException : asm.ClassReader.readClass (알 수없는 소스) [duplicate] (0) | 2019.02.28 |
[SPRING] 이름이 AuthenticationManager 인 빈을 만드는 중 오류가 발생했습니다. (0) | 2019.02.27 |
[SPRING] 엔티티 관계가 제대로 채워지지 않습니다. (0) | 2019.02.27 |