English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Security는 JSP 페이지에 자체 태그를 제공합니다. 이 태그는 JSP에서 보안 정보에 접근하고 보안 제약 조건을 적용하는 데 사용됩니다.
이 태그는 애플리케이션의 뷰 레이어를 보호하기 위해 사용됩니다.
권한 부여 태그 인증 태그 Accesscontrollist 태그 Csrfinput 태그 CsrfMetaTags 태그
이 태그는 권한 부여 목적을 위해 사용됩니다. 이 태그는 요청이 권한을 가지고 있는지 평가하고 확인합니다.
이 태그는 두 가지 속성을 사용합니다 접근 와 URL 요청 권한을 확인하기 위해 사용됩니다. 사용자 역할을 통해 이 태그를 평가할 수 있습니다.
속성이 만족할 때만, 이 태그 내의 내용이 표시됩니다. 예를 들어.
<sec:authorize access="hasRole('ADMIN')"> 사용자가 관리자일 때만 표시됩니다 </sec:authorize>
이 태그는 보안 컨텍스트에 저장된 인증에 접근하기 위해 사용됩니다. Authentication이 UserDetails 객체의 인스턴스인 경우, 현재 사용자의 상세 정보를 가져올 수 있습니다. 예를 들어.
<sec:authentication property="principal.username">
이 표시는 Spring Security의 ACL 모듈과 함께 사용됩니다. 지정된 도메인의 필요한 권한 목록을 확인합니다. 현재 사용자가 모든 권한을 가지고 있을 때만 실행됩니다. 예를 들어.
<sec:accesscontrollist hasPermission="1,2domainObject="${someObject}"> 사용자가 값으로 대표된 모든 권한을 가지고 있다면.1또는2given object에 대한. </sec:accesscontrollist>
이 태그는 HTML 폼에서 CSRF 토큰을 생성하는 데 사용됩니다. 사용하려면 CSRF 보호를 활성화한 상태여야 합니다. 이 태그를 다음에 두어야 합니다 태그 내에 CSRF 토큰을 생성하려면 예제와 같이 합니다.
<form method="post" action="/some/action"> <sec:csrfInput /framework 이름:<br /framework <input type="text" name="username" /framework ... </form>
CSRF 토큰, 폼 필드, 헤더 이름 및 CSRF 토큰 값을 포함한 메타 태그를 삽입합니다. 이 값은应用程序에서 JavaScript에서 CSRF 토큰을 설정하는 데 유용합니다.
이 태그는 HTML 태그 내에 위치해야 합니다.
이 태그 중 하나를 구현하려면,应用程序에서 spring security taglib jar가 필요합니다. 또한 다음 Maven 의존성을 추가할 수 있습니다.
<dependency> <groupId>org.springframework.security</<groupId> <artifactId>spring-security-taglibs</plugin< artifactId>5.0.4.RELEASE</version> </dependency>
JSP 페이지에서는 다음과 같은 선언을 사용하여 taglib를 사용할 수 있습니다.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
이제, Spring Security Maven 프로젝트에서 이 태그를 구현하는 예제를 보겠습니다.
우리는 STS(Spring 도구 세트)를 사용하여 프로젝트를 생성하고 있습니다. 예제를 참조하세요.
클릭 완료 > 버튼을 클릭하면 다음과 같은 Maven 프로젝트가 생성됩니다:
Spring MVC应用程序에서 Spring Security를 구성하려면 다음 네 개의 파일을 넣으세요 com.w3codebox中文件夹。
AppConfig.java
package com.w3codebox; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @EnableWebMvc @Configuration @ComponentScan({ "com.w3codebox.controller.*" )) public class AppConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/); viewResolver.setSuffix(".jsp"); return viewResolver; } }
AppConfig을 사용하여 뷰 파일의 뷰 위치 접미자를 설정합니다.
//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[] { "/"}; } }
이 클래스는 servlet 스케줄러를 초기화하는 데 사용됩니다.
//SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
추가로 사용자를 생성하고 사용자 접근성에 인증 및 권한 부여를 적용하는 클래스를 생성합니다.
//WebSecurityConfig.java
package com.w3codebox; import org.springframework.context.annotation.*; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.*; import org.springframework.security.core.userdetails.User.UserBuilder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @EnableWebSecurity @ComponentScan("com.w3codebox) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public UserDetailsService userDetailsService() { // ensure the passwords are encoded properly UserBuilder users = User.withDefaultPasswordEncoder(); InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(users.username("mohan").password("1mohan23").roles("USER").build()); manager.createUser(users.username("mohan").password("123manager.createUser(users.username("admin").password("admin").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index","/").permitAll() .antMatchers("/admin","/user()).authenticated() .and() .formLogin() .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")); } }
지금, 요청을 처리하고 응답을 생성하는 컨트롤러를 생성합니다.
//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"; } @RequestMapping(value="/user", method=RequestMethod.GET) public String user() { return "admin"; } @RequestMapping(value="/admin", method=RequestMethod.GET) public String admin() { return "admin"; } }
사용자에게 출력을 표시하기 위해 뷰(jsp) 파일을 생성했습니다. 아래를 참조하십시오.我们已经创建了三个JSP文件,请参见下文。
//index.jsp
<html> <head> <title>홈 페이지</title> </head> <body> <a href="user">User</a> <a href="admin">Admin</a> <br> <br> w에 오신 것을 환영합니다3codebox! </body> </html>
//user.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>홈 페이지</title> </head> <body> 사용자 페이지에 오신 것을 환영합니다! </body> </html>
//admin.jsp
관리 페이지에서는 authorize 태그를 사용했습니다. 이 태그는 지정된 역할을 만족할 때만 평가됩니다.
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>홈 페이지</title> </head> <body> admin 페이지에 오신 것을 환영합니다! <a href="logout">logout</a> <br><br> <security:authorize access="hasRole('ADMIN')"> 안녕하세요 ADMIN </security:authorize> <security:csrfInput/framework </body> </html>
우리의 프로젝트는 다음과 같은 애플리케이션을 구축하는 데 필요한 의존성을 포함하고 있습니다.
//pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.w3codebox</<groupId> <artifactId>springtaglibrary</plugin< <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.target>1<version>8</maven.compiler.target> <maven.compiler.source>1<version>8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework</<groupId> <artifactId>spring-webmvc</plugin< artifactId>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</<groupId> <artifactId>spring-security-web</plugin< artifactId>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</<groupId> <artifactId>spring-security-core</plugin< artifactId>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/-security-taglibs --framework <dependency> <groupId>org.springframework.security</<groupId> <artifactId>spring-security-taglibs</plugin< artifactId>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/-security-config --framework <dependency> <groupId>org.springframework.security</<groupId> <artifactId>spring-security-config</plugin< artifactId>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --framework <dependency> <groupId>javax.servlet</<groupId> <artifactId>javax.servlet-api</plugin< artifactId>3<version>1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</<groupId> <artifactId>jstl</plugin< artifactId>1<version>2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/--spring --framework </bom <dependencies> <build> <plugins> <plugin>/<groupId> <groupId>org.apache.maven.plugins<-<artifactId>maven-war/plugin< artifactId>2<version>6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
모든 이 파일을 추가한 후, 우리의 프로젝트는 다음과 같습니다:
프로젝트를 마우스 오른쪽 버튼으로 클릭한 후, 서버에서 실행브라우저에 다음 출력을 표시합니다.
제공함으로써 AppSecurityConfig 파일에 설정된 인증 정보를 클릭하여 사용자에 로그인하십시오.
성공적으로 로그인한 후, 다음과 같은 관리 페이지가 표시됩니다. 여기서 주의할 점은 로그인한 사용자가 USER 역할을 가지고 있기 때문에 authorize 태그 내에 있는 내용이 표시되지 않는다는 점입니다.
로그아웃, 지금 관리자 인증 정보를 제공하여 admin 권한으로 로그인하십시오.
admin 권한으로 로그인한 후, 이번 authorize 태그를 평가하고 다음 출력을 표시하십시오.