English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Framework에서 Spring 3.1에 Java 설정 지원을 추가했습니다. Spring Security에서 Java 설정이 Spring Security에 추가되었습니다 3.2에서, 우리는 Spring Security를 설정할 수 있습니다 XML 단일 줄을 작성하지 않습니다.
여기서 우리는 Spring의 예제를 생성할 것입니다. 보안을 구현하고 XML을 사용하지 않습니다. 다음 단계를 포함하고 있습니다.
첫 번째 단계는 Spring Security Java 설정을 생성하는 것입니다. 아래는 간단한 기본 Java 설정 예제입니다.
WebSecurityConfig.java
package com.w3codebox; import org.springframework.context.annotation.*; //import org.springframework.security.config.annotation.authentication.builders.*; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @EnableWebSecurity @ComponentScan("com.w3codebox") public class WebSecurityConfig implements WebMvcConfigurer { @Bean public UserDetailsService userDetailsService() throws Exception { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withDefaultPasswordEncoder().username("w3codebox"). password("java123").roles("USER").build()); return manager; } protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/)") .authorizeRequests() .anyRequest().hasRole("ADMIN") .and() .httpBasic(); } }
이 구성은 springSecurityFilterChain 하는 Servlet 필터. 담당애플리케이션 URL을 보호하고, 제출된 사용자 이름과 비밀번호를 확인하고, 로그인 양식으로 리디렉션 등을 담당합니다.
위의 Java 설정은 우리의 애플리케이션에 다음과 같은 작업을 수행합니다.
각 URL에 대해 인증을 요구합니다 로그인 양식을 생성합니다 사용자가 양식 기반 인증을 사용하여 인증을 허용합니다 注销을 허용합니다 CSRF 공격을 방지합니다 안전 제목 통합 등
지금, 우리는 전쟁에 등록할 것입니다 springSecurityFilterChain 등록을 위해, Spring Security는 우리가 확장해야 하는 기본 클래스 AbstractSecurityWebApplicationInitializer를 제공합니다.
Spring MVC 애플리케이션에 대해서, SecurityWebApplicationInitializer는 다음과 같습니다.
SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
이 코드는 우리의 애플리케이션에서 각 URL에 대해 springSecurityFilterChain을 등록합니다.
현재, WebSecurityConfig을 우리가 이미 있는 ApplicationInitializer에 로드하고 getRootConfigClasses() 메서드에 추가합니다.
MvcWebApplicationInitializer.java
package com.w3codebox; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { WebSecurityConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { // TOdo Auto-generated method stub return null; } @Override protected String[] getServletMappings() { return new String[] { "/"}; } }
WebSecurityConfigurerAdapter 类提供了一个configure(HttpSecurity http)方法,该方法包含以下默认配置。默认定义如下所示。
protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); }
它类似于给定的XML。
<http <intercept-url pattern="/**" access="authenticated"/> <form-login /> <http-basic /> </http>
此方法执行以下操作。
它确保用户提出的每个请求都要求对用户进行身份验证 它允许用户使用基于表单的登录进行身份验证 它允许用户使用HTTP Basic身份验证进行身份验证
创建一个控制器来处理用户请求。
HomeController.java
package com.w3codebox.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class HomeController { @RequestMapping(value="/", method=RequestMethod.GET) public String index() { return "index"; } }
우리는 하나의 뷰(.jsp) 페이지를 가지고 있습니다 index.jsp 이고, 다음과 같은 소스 코드를 포함하고 있습니다.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>홈 페이지</title> </head> <body> 홈 페이지로 환영합니다! </body> </html>
우리의 전체 프로젝트는 다음과 같습니다.
출력:
컨트롤러에서 하나의 액션 만 있으며, 실제 사용자만 접근할 수 있습니다. 따라서 애플리케이션을 실행하면 로그인凭证 입력을 요청합니다. 아래는 출력입니다.
이것은 Spring Security가 제공하는 기본 로그인 페이지페이지를 만들지 않았습니다. 우리는 자신의 로그인 페이지를 만들고 애플리케이션을 구성할 수 있습니다. 다음 주제에서 이 작업을 수행할 것입니다.
지금, 애플리케이션 자원에 접근하기 위해 로그인凭证을 제공하세요. Spring Security는 사용자凭证을 검증하고 사용자의 정실성을 보장합니다.
그럼에도 불구하고 무엇이 일어날까요? 잘못된凭证을 입력한 경우.
로그인 버튼을 클릭하면 Bad Credentials (오류凭证) 오류.
지금, 정확한凭证 로그인./strong>
이凭证이 일치하여 메인 페이지(index.jsp)가 표시되었습니다。