Spring in action 4 판 스프링 5 로 수정

28650 단어 구덩이
WebMvcConfigurationSupport 설정 사용 하기
기 존 WebMvcConfigurerAdapter 를 사용 할 수 없습니다.
@EnableWebMvc 주 해 를 추가 하지 마 세 요.
그렇지 않 으 면 addResourceHandlers 가 실행 되 지 않 고 정적 자원 을 불 러 올 수 없습니다.
프로 퍼티 파일
setDefault Encoding 을 사용 하여 UTF-8 인 코딩 을 보증 하고 국제 화 정보 난 장 판 을 방지 할 수 있 습 니 다.
	@Bean
	public MessageSource messageSource() {
     
		ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
		messageSource.setBasename("file:///D:/EclipseApp/Spittr/src/messages");
		messageSource.setCacheSeconds(10);
		messageSource.setDefaultEncoding("UTF-8");
		return messageSource;
	}

라벨
	@Bean
	public MessageSource validationSource() {
     
		ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
		messageSource.setBasename("file:///D:/EclipseApp/Spittr/src/ValidationMessages");
		messageSource.setCacheSeconds(10);
		messageSource.setDefaultEncoding("UTF-8");
		return messageSource;
	}

	@Bean
	public LocalValidatorFactoryBean getValidator() {
     
		LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
		bean.setValidationMessageSource(validationSource());
		return bean;
	}

Thymeleaf 설정
ServletContextTemplate Resolver 를 사용 하여 프로젝트 의 상대 적 인 위 치 를 지정 하 는 템 플 릿 파일 입 니 다.구조 기 인 자 는 this.getServletContext()입 니 다.
	@Bean
	public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
     
		ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
		viewResolver.setTemplateEngine(templateEngine);
		return viewResolver;
	}
	
	@Bean
	public SpringTemplateEngine templateEngine(ServletContextTemplateResolver templateResolver) {
     
		SpringTemplateEngine templateEngine = new SpringTemplateEngine();
		templateEngine.setTemplateResolver(templateResolver);
		return templateEngine;
	}
	
	@Bean
	public ServletContextTemplateResolver templateResolver() {
     
		ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(this.getServletContext());
		templateResolver.setPrefix("/WEB-INF/templates/");
		templateResolver.setSuffix(".html");
		templateResolver.setTemplateMode("HTML5");
		return templateResolver;
	}

라 이브 러 리 에 가입 할 때 소스 와 doc 를 넣 지 마 세 요.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
Thymeleaf 인 코딩

	@Bean
	public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
     
		ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
		viewResolver.setTemplateEngine(templateEngine);
		viewResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
		return viewResolver;
	}
	
	@Bean
	public SpringTemplateEngine templateEngine(ServletContextTemplateResolver templateResolver) {
     
		SpringTemplateEngine templateEngine = new SpringTemplateEngine();
		templateEngine.setTemplateResolver(templateResolver);
		return templateEngine;
	}
	
	@Bean
	public ServletContextTemplateResolver templateResolver() {
     
		ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(this.getServletContext());
		templateResolver.setPrefix("/WEB-INF/templates/");
		templateResolver.setSuffix(".html");
		templateResolver.setTemplateMode("HTML5");
		templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
		return templateResolver;
	}

봄 보안 관련
  • conf 디 렉 터 리 는 Eclipse 프로젝트 목록 Servers 의 용기 목록 에 있 습 니 다.원본 설치 디 렉 터 리 가 아 닙 니 다.
  • server.xml 파일 에 https 포트 설정
  • server.xml 에 설 치 된 http 포트 에서 https 포트 로 의 재 설정 은 작 동 하지 않 습 니 다.Spring Security 의 자바 설정 에서 다음 과 같이 설정 해 야 합 니 다
  • @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
         
    
    	
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
         
    		http.authorizeRequests().antMatchers(HttpMethod.POST, "/spittles").hasRole("SPITTER")
    		.anyRequest().permitAll()
    		.and()
    		.requiresChannel()
    		.antMatchers("/spitter/register").requiresSecure();
    		http.portMapper().http(80).mapsTo(8443);
    	}
    }
    
  • Spring Security 는 CSRF 방 호 를 자동 으로 켜 기 때문에 모든 폼 에 token 을 추가 해 야 합 니 다.그렇지 않 으 면 403!!!!!!!!!
  • 사용자 정의 로그 인 페이지
  • 
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8">
    <title>Spittrtitle>
    head>
    <body>
    <h1>Welcome to Spittrh1>
    <form name='f' th:action='@{/login}' method='POST'>
    	<table>
    		<tr><td>User:td><td><input type='text' name='username' value='' />td>tr>
    		<tr><td>Password:td><td><input type='password' name='password' value='' />td>tr>
    		<tr><td colspan='2'><input type='submit' name='submit' value='Login' />td>tr>
    	table>
    form>
    body>
    html>
    
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
         
    //		http.csrf().disable();
    		http.authorizeRequests()
    		.antMatchers("/spittles").hasRole("USER")
    		.anyRequest().permitAll()
    //		.and()
    //		.requiresChannel()
    //		.antMatchers("/spitter/register").requiresSecure()
    		.and().formLogin()
    		.loginPage("/login").permitAll()
    		;
    //		http.portMapper().http(8080).mapsTo(8443);
    	}
    
  • 크롬의 csrf 지원 이 좀 이상 합 니 다...다른 브 라 우 저 는 정상적으로 작 동 합 니 다.chrome 은 403
  • 을 보고 합 니 다.

    좋은 웹페이지 즐겨찾기