SpringBoot Shiro 통합 로그 인 인증 방법
8754 단어 SpringBootShiro로그 인
간단 한 소개
Apache Shiro 는 강력 하고 유연 하 며 개 원 된 보안 프레임 워 크 입 니 다.그것 은 인증,권한 수여,기업 세 션 관리 와 암호 화 를 깔끔하게 처리 할 수 있다.
위의 그림 은 Shiro 의 기본 구조 입 니 다.
인증(인증)
때로는'로그 인'이 라 고 불 리 며 사용자 가 자신 임 을 증명 하 는 데 쓰 인 다.
인증(권한 부여)
접근 제어 과정,즉"누구"가"무엇"에 접근 하 는 지 확인 합 니 다.
세 션 관리(세 션 관리)
사용자 의 특정한 세 션 을 관리 합 니 다.Shiro 에서 모든 사용자 의 세 션 정 보 를 Shiro 에서 제어 할 수 있 습 니 다.
암호 화(암호 화)
데이터 원본 에 암호 화 알고리즘 을 사용 하여 암호 화 하 는 동시에 쉽게 사용 할 수 있 도록 합 니 다.
Start
환경.
Spring Boot 1.5.9 MySQL 5.7 Maven 3.5.2 Spring Data Jpa Lombok
의존 도 를 높이다
여 기 는 주요 Shiro 의존 만 드 립 니 다.
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.4.0-RC2</version>
</dependency>
배치 하 다.저 희 는 잠시 사용자 시트,캐릭터 시트 만 필요 합 니 다.Spring boot 에서 설정 파일 을 수정 하면 자동 으로 데이터베이스 시트 를 만 들 수 있 습 니 다.
server:
port: 8888
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/shiro?characterEncoding=utf-8&useSSL=false
jpa:
generate-ddl: true
hibernate:
ddl-auto: update
show-sql: true
실체Role.java
@Data
@Entity
public class Role {
@Id
@GeneratedValue
private Integer id;
private Long userId;
private String role;
}
User.java
@Data
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
}
Realm먼저 Realm 클래스 를 만 들 고 Authorizing Realm 에서 계승 하여 우리 자신의 권한 수여 와 인증 방법 을 사용자 정의 합 니 다.Realm 은 프로그램 에 지정 한 보안 데이터(예 를 들 어 사용자,역할,권한)에 접근 할 수 있 는 구성 요소 입 니 다.
Realm.java
public class Realm extends AuthorizingRealm {
@Autowired
private UserService userService;
//
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//
String username = (String) SecurityUtils.getSubject().getPrincipal();
//
User user = userService.getUserByUserName(username);
//
List<Role> list = roleService.findByUserId(user.getId());
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
for (Role role : list) {
//
info.addStringPermission(role.getRole());
}
return info;
}
//
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//
String username = (String) authenticationToken.getPrincipal();
//
User user = userService.getUserByUserName(username);
if (userService.getUserByUserName(username) == null) {
throw new UnknownAccountException(
" 。");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(),getName());
return info;
}
}
Shiro 설정 클래스ShiroConfig.java
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
// , , /**
//
filterChainDefinitionMap.put("/favicon.ico", "anon");//
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public DefaultWebSecurityManager securityManager() {
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(myRealm());
return defaultWebSecurityManager;
}
@Bean
public MyRealm myRealm() {
MyRealm myRealm = new MyRealm();
return myRealm;
}
}
컨트롤 러UserController.java
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/")
public String index() {
return "index";
}
@GetMapping("/login")
public String toLogin() {
return "login";
}
@GetMapping("/admin")
public String admin() {
return "admin";
}
@PostMapping("/login")
public String doLogin(String username, String password) {
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:admin";
}
@GetMapping("/home")
public String home() {
Subject subject = SecurityUtils.getSubject();
try {
subject.checkPermission("admin");
} catch (UnauthorizedException exception) {
System.out.println(" ");
}
return "home";
}
@GetMapping("/logout")
public String logout() {
return "index";
}
}
ServiceUserService.java
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User getUserByUserName(String username) {
return userDao.findByUsername(username);
}
@RequiresRoles("admin")
public void send() {
System.out.println(" admin, ");
}
}
전시 층admin.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en"/>
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value=" " />
</form>
</body>
</html>
home.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en"/>
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
home
</body>
</html>
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en"/>
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
index
<a href="/login" rel="external nofollow" > </a>
</body>
</html>
login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en"/>
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value=" " />
</form>
</body>
</html>
총결산이 작은 사례 는 역할 에 따라 사용자 의 방문 을 통제 하 는 것 을 실현 했다.그 중에서 가장 중요 한 것 은 Realm 이다.이 는 Shiro 와 응용 안전 데이터 간 의'교량'또는'커 넥 터'역할 을 한다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.