繁体   English   中英

Spring Boot编码过滤器

[英]Spring boot encoding filter

我使用Spring Boot和Spring Security,并且需要对请求进行编码。 因此,我在Spring Security中使用了编码过滤器,并将其添加到其他过滤器之前。 而且它不起作用。 我得到以下结果:

在此处输入图片说明

@Configuration
@EnableWebSecurity
public class SecurityJavaConfig extends WebSecurityConfigurerAdapter {

@Autowired
private MyUserDetailsService myUserDetailsService;

@Autowired
private UserDao userDao;

@Autowired
private RestAuthenticationEntryPoint restAuthenticationEntryPoint;

@Autowired
private AuthenticationSuccessHandler authenticationSuccessHandler;

@Autowired
private CustomAuthenticationFailureHandler customAuthenticationFailureHandler;

@Bean(name = "myAuthenticationManager")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

@Bean
public PasswordEncoder customPasswordEncoder() {
    return new PasswordEncoder() {
        @Override
        public String encode(CharSequence rawPassword) {
            return DigestUtils.md5Hex(rawPassword.toString());
        }
        @Override
        public boolean matches(CharSequence rawPassword, String encodedPassword) {
            return DigestUtils.md5Hex(rawPassword.toString()).equals(encodedPassword);
        }
    };
}

@Bean
public CustomUsernamePasswordAuthenticationFilter customUsernamePasswordAuthenticationFilter()
        throws Exception {
    CustomUsernamePasswordAuthenticationFilter customUsernamePasswordAuthenticationFilter = new CustomUsernamePasswordAuthenticationFilter(userDao);
    customUsernamePasswordAuthenticationFilter.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST"));
    customUsernamePasswordAuthenticationFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler);
    customUsernamePasswordAuthenticationFilter.setAuthenticationFailureHandler(customAuthenticationFailureHandler);
    customUsernamePasswordAuthenticationFilter
            .setAuthenticationManager(authenticationManagerBean());
    return customUsernamePasswordAuthenticationFilter;
}

@Override
protected void configure(AuthenticationManagerBuilder auth)
        throws Exception {
    auth.userDetailsService(myUserDetailsService).passwordEncoder(customPasswordEncoder());
}


@Override
protected void configure(HttpSecurity http) throws Exception {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    http.addFilterBefore(filter,CsrfFilter.class);
    //Implementing Token based authentication in this filter
    final TokenAuthenticationFilter tokenFilter = new TokenAuthenticationFilter(userDao);
    http.addFilterBefore(tokenFilter, BasicAuthenticationFilter.class);
    http.addFilterBefore(customUsernamePasswordAuthenticationFilter(), CustomUsernamePasswordAuthenticationFilter.class);

    http.csrf().disable();
    http.cors();

    http.sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.exceptionHandling()
            .authenticationEntryPoint(restAuthenticationEntryPoint)
            .and()
            .authorizeRequests()
            .antMatchers("/news/create").hasAnyAuthority("ADMIN")
            .antMatchers("/news/update").hasAnyAuthority("ADMIN")
            .antMatchers("/news/update/*").hasAnyAuthority("ADMIN")
            .antMatchers("/news/delete").hasAnyAuthority("ADMIN")
            .antMatchers("/**").hasAnyAuthority("USER", "ADMIN")
            .and()
            .logout();
}

//cors configuration bean
...
}

我使用了许多不同的方法来解决它。 但是什么都行不通...我现在无法发布此问题,因为有很多代码。 非常抱歉,但是我必须写一些句子才能发布它)谢谢

尝试在application.properties添加编码配置

如下 :

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

请参阅文档以获取更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM