首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Spring 4.x Java代码的配置:静态资源文件和Dispatcher servlet

基于Spring 4.x Java代码的配置:静态资源文件和Dispatcher servlet
EN

Stack Overflow用户
提问于 2015-04-08 12:53:02
回答 1查看 1.4K关注 0票数 0

在Servlet3.0之前,所有配置都是基于xml的。我目前正在使用基于代码/注释的配置。

在xml样式配置中,我们有

代码语言:javascript
复制
<mvc:resources mapping="/res/**" location="/res/" />

如何将其转换为基于代码的配置?我不断收到来自eclipse调试控制台的错误,即没有为资源文件找到dispatcher servlet。

顺便说一句,这是我的参考资料,从SpringSecurity3.x迁移到4.x (Java配置)

初始化器

代码语言:javascript
复制
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配置

代码语言:javascript
复制
@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;
    }
}

安全配置

代码语言:javascript
复制
@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();
    }
}

安全初始化器

代码语言:javascript
复制
public class SecurityInitializer extends
        AbstractSecurityWebApplicationInitializer {

}

自定义登录

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-08 13:02:07

您可以从WebMvcConfigurerAdapter扩展并重写addResourceHandlers方法。

代码语言:javascript
复制
@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/");
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29515202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档