Shiro 소개
Apache Shiro는 인증, 승인, 비밀번호 관리, 세션 관리 및 기타 기능을 제공하는 경량 오픈 소스 Java 보안 프레임워크입니다. Spring Security에 비해 Shiro 프레임워크는 더 직관적이고 사용하기 쉬우며 강력한 보안도 제공합니다.
기존 SSM 프레임워크에는 Shiro를 수동으로 통합하는 데 여전히 많은 구성 단계가 있습니다. Spring Boot의 경우 Shiro는 Spring Boot에서 Shiro 구성을 단순화하기 위해 공식적으로 shiro-spring-boot-web-starter를 제공합니다.
Shiro 통합
1. 프로젝트 만들기
먼저 일반 Spring Boot 웹 프로젝트를 만들고 Shiro 종속성 및 페이지 템플릿 종속성을 추가합니다.
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>com.github.theborakompanioni</groupId> <artifactId>thymeleaf-extras-shiro</artifactId> <version>2.0.0</version> </dependency>
spring-boot-starter-web 종속성, shiro-spring을 추가할 필요가 없습니다. -boot -web-starter는 이미 spring-boot-starter-web에 의존합니다. 동시에 Thymeleaf에서 shiro 태그를 사용하기 위해 Thymeleaf 템플릿이 사용됩니다. thymeleaf-extras-shiro 종속성이 추가됩니다.
2. Shiro 기본 구성
application.properties에서 Shiro의 기본 정보를 구성합니다
# Shiro 구성을 활성화합니다. 기본값은 true
그런 다음 Java 코드로 Shiro를 구성하고 가장 기본적인 두 개의 Bean을 제공하세요.
shiro.enabled=true
# Shiro 웹 구성을 활성화합니다. 기본값은 true
shiro .web .enabled=true
# 로그인 주소를 구성합니다. 기본값은 /login.jsp
shiro.loginUrl=/login
# 성공적인 로그인을 위한 주소를 구성합니다. 기본값은 /
shiro.successUrl=/index
# Unauthorized 기본 점프 주소
shiro.unauthorizedUrl=/unauthorized
# URL 매개변수를 통한 세션 추적 허용 여부. 웹사이트가 쿠키를 지원하는 경우 이 옵션을 끌 수 있습니다. 기본값은 true입니다. 쿠키를 통해 세션 추적을 허용하려면 기본값은 Set true
shiro.sessionManager.sessionIdCookieEnabled=true
@Configuration public class ShiroConfig { @Bean public Realm realm() { TextConfigurationRealm realm = new TextConfigurationRealm(); realm.setUserDefinitions("sang=123,user\n admin=123,admin"); realm.setRoleDefinitions("admin=read,write\n user=read"); return realm; } @Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition(); chainDefinition.addPathDefinition("/login", "anon"); chainDefinition.addPathDefinition("/doLogin", "anon"); chainDefinition.addPathDefinition("/logout", "logout"); chainDefinition.addPathDefinition("/**", "authc"); return chainDefinition; } @Bean public ShiroDialect shiroDialect() { return new ShiroDialect(); } }
코드 설명:
- 여기에 두 가지 핵심이 있습니다. 하나는 Realm이고 다른 하나는 ShiroFilterChainDefinition입니다. ShiroDialect의 경우 Thymeleaf에서 Shiro 태그 사용을 지원하기 위한 것입니다. Thymeleaf에서 Shiro 태그를 사용하지 않으면 ShiroDialect를 제공할 필요가 없습니다.
- Realm은 사용자 정의 Realm이거나 Shiro가 제공하는 Realm일 수 있습니다. 단순화를 위해 여기에는 데이터베이스 연결이 구성되어 있지 않으며 각각 user 및 admin 역할에 해당하는 두 명의 사용자(sang/123 및 admin/123)가 직접 구성됩니다.
- ShiroFilterChainDefinition Bean은 기본 필터링 규칙인 "/login" 및 "/doLogin"으로 구성되며 익명으로 액세스할 수 있고 "/logout"은 로그아웃 요청이며 기타 요청은 액세스하기 전에 인증이 필요합니다
- Then 로그인 인터페이스 및 페이지 액세스 인터페이스 구성
@Controller public class UserController { @PostMapping("/doLogin") public String doLogin(String username, String password, Model model) { UsernamePasswordToken token = new UsernamePasswordToken(username, password); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); } catch (AuthenticationException e) { model.addAttribute("error", "用户名或密码输入错误!"); return "login"; } return "redirect:/index"; } @RequiresRoles("admin") @GetMapping("/admin") public String admin() { return "admin"; } @RequiresRoles(value = {"admin", "user"}, logical = Logical.OR) @GetMapping("/user") public String user() { return "user"; } }
코드 설명:
- doLogin 메소드에서 먼저 UsernamePasswordToken 인스턴스를 빌드한 다음 Subject 객체를 가져오고 객체에서 로그인 메소드를 호출하여 로그인 작업을 수행합니다. 로그인 작업 실행 과정에서 예외가 발생하면 로그인이 실패했음을 의미하며, 로그인에 성공하면 "/index"로 리디렉션됩니다.
- 다음 , 두 인터페이스 "/admin" 및 "/admin"은 "/user"로 노출됩니다. "/admin" 인터페이스의 경우 "/user" 인터페이스에 액세스하려면 관리자 역할이 있어야 합니다. 액세스하려면 관리자 역할이나 사용자 역할이 있어야 합니다.
- 다른 역할의 경우 액세스된 인터페이스는 WebMvc
@Configuration public class WebMvcConfig implements WebMvcConfigurer{ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/login").setViewName("login"); registry.addViewController("/index").setViewName("index"); registry.addViewController("/unauthorized").setViewName("unauthorized"); } }
에서 직접 구성할 수 있습니다. 다음으로 전역 예외 처리를 위한 전역 예외 처리기를 만듭니다. 승인 예외를 처리하는 것입니다
@ControllerAdvice public class ExceptionController { @ExceptionHandler(AuthorizationException.class) public ModelAndView error(AuthorizationException e) { ModelAndView mv = new ModelAndView("unauthorized"); mv.addObject("error", e.getMessage()); return mv; } }
사용자가 승인되지 않은 리소스에 액세스하면 승인되지 않은 보기로 점프하고 오류 메시지를 전달합니다.
구성이 완료되면 마지막으로 resources/templates 디렉터리에 테스트용 HTML 페이지 5개를 생성하세요.
(1) index.html
<!DOCTYPE html> <html lang="en" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4 id="Hello-nbsp-shiro-principal">Hello, <shiro:principal/></h4> <h4 id="a-nbsp-href-logout-nbsp-rel-external-nbsp-nofollow-nbsp-注销登录-a"><a href="/logout" rel="external nofollow" >注销登录</a></h4> <h4 id="a-nbsp-shiro-hasRole-admin-nbsp-href-admin-nbsp-rel-external-nbsp-nofollow-nbsp-管理员页面-a"><a shiro:hasRole="admin" href="/admin" rel="external nofollow" >管理员页面</a></h4> <h4 id="a-nbsp-shiro-hasAnyRoles-admin-user-nbsp-href-user-nbsp-rel-external-nbsp-nofollow-nbsp-普通用户页面-a"><a shiro:hasAnyRoles="admin,user" href="/user" rel="external nofollow" >普通用户页面</a></h4> </body> </html>
(2) login.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <form action="/doLogin" method="post"> <input type="text" name="username"><br> <input type="password" name="password"><br> <div th:text="${error}"></div> <input type="submit" value="登录"> </form> </div> </body> </html>
(3) user.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2 id="普通用户页面">普通用户页面</h2> </body> </html>
(4) admin.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2 id="管理员页面">管理员页面</h2> </body> </html>
(5) 무단.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <h4 id="未获授权-非法访问">未获授权,非法访问</h4> <h4 th:text="${error}"></h4> </div> </body> </html>
3.
프로젝트를 시작하고 로그인 페이지를 방문하여 sang/123
을 사용하여 로그인하세요. 참고: sang 사용자에게는 관리자 역할이 없으므로 로그인 성공 후 페이지에는 관리자 페이지에 대한 하이퍼링크가 없습니다. .
그런 다음 admin/123을 사용하여 로그인하세요.
사용자가 sang을 사용하여 로그인한 후 http://localhost:8080/admin을 방문하면 승인되지 않은 페이지로 이동합니다
위 내용은 SpringBoot 보안 관리의 Shiro 프레임워크를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

클래스 로더는 통합 클래스 파일 형식, 동적로드, 부모 위임 모델 및 플랫폼 독립적 인 바이트 코드를 통해 다른 플랫폼에서 Java 프로그램의 일관성과 호환성을 보장하고 플랫폼 독립성을 달성합니다.

Java 컴파일러가 생성 한 코드는 플랫폼 독립적이지만 궁극적으로 실행되는 코드는 플랫폼 별입니다. 1. Java 소스 코드는 플랫폼 독립적 인 바이트 코드로 컴파일됩니다. 2. JVM은 바이트 코드를 특정 플랫폼의 기계 코드로 변환하여 크로스 플랫폼 작동을 보장하지만 성능이 다를 수 있습니다.

멀티 스레딩은 프로그램 대응 성과 리소스 활용을 향상시키고 복잡한 동시 작업을 처리 할 수 있기 때문에 현대 프로그래밍에서 중요합니다. JVM은 스레드 매핑, 스케줄링 메커니즘 및 동기화 잠금 메커니즘을 통해 다양한 운영 체제에서 멀티 스레드의 일관성과 효율성을 보장합니다.

Java의 플랫폼 독립성은 작성된 코드가 수정없이 JVM이 설치된 모든 플랫폼에서 실행될 수 있음을 의미합니다. 1) Java 소스 코드는 바이트 코드로 컴파일됩니다. 2) 바이트 코드는 JVM에 의해 해석되고 실행됩니다.

javaapplicationscanindeedencounterplatform-specificissuesdespitetejvm'sabstraction.ressistinclude : 1) nativecodeandlibraries, 2) OperatingSystemDifferences, 3) jvmimplementationvariations, 및 4) 어려운 의존성, 개발자, 1)

클라우드 컴퓨팅은 Java의 플랫폼 독립성을 크게 향상시킵니다. 1) Java Code는 바이트 코드로 컴파일되어 다른 운영 체제에서 JVM에 의해 실행되어 크로스 플랫폼 작동을 보장합니다. 2) Docker 및 Kubernetes를 사용하여 Java 응용 프로그램을 배포하여 휴대 성 및 확장 성을 향상시킵니다.

Java'SplatformIndencealLowsDeveloperstowStowRiteCodeOntOnitOniNanyDeviceOroswithajvm. ThisIsachieAdthroughCompilingTobyTecode, thejvMIngretSorcompileStruntime.thistureatureDificallyNatlyBoostedjava'SADOPTIONDUOCROSS-PLAT-PLAT-PLAT-PLAT-PLAT-PLAT-PLAT-PLAT-PPLATION

Docker와 같은 컨테이너화 기술은 Java의 플랫폼 독립성을 대체하기보다는 향상됩니다. 1) 환경 간 일관성을 보장, 2) 특정 JVM 버전을 포함한 종속성 관리, 3) 배포 프로세스를 단순화하여 Java 응용 프로그램을보다 적응 가능하고 관리 할 수 있도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
