비문이 : springboot 및 thymeleaf을 학습 한 후, 손을 연습 할 프로젝트를 완료하고자, 다음 사용 springboot + MyBatis로 및 블로그 시스템을 완료 thymeleaf, 몇 가지 문제가 자신의 학습 경험으로 기록되어 이러한 문제의 완료시 발생 . 이 Tumo TyCoding 프로젝트의 주요 그룹에 감사합니다,하지만 그들은 너무 요리, 많은 장소는 이해하지만 여전히 저를 잘 제공하지 않습니다.
간단한 측면에서 인증 및 권한 부여를위한 작은하고 유연한 보안 프레임 워크로 시로하지만 간단하지가 매우 쉽게 시작합니다. 여기에 특정 프로세스를 통합 시로입니다.
의존도를 추가하십시오
1 <! - 시로和스프링整合-> 2 <의존성> 3 <의 groupId> org.apache.shiro </의 groupId> 4 <artifactId를> 시로 스프링 </ artifactId를> 5 <버전> 1.3.2 </ 버전 > 6 </ 의존성> 7 <! - 시로核心包-> 8 <의존성> 9 <의 groupId> org.apache.shiro </의 groupId> 10 <artifactId를> 시로 코어 </ artifactId를> 11 <version>은 1.3 0.2 </ 버전> 12 </ 의존성>
기본 패키지 springboot 콘솔에서 엔티티 클래스를 스캔하고 스캔 2. 추가 주석
정말 부주의은 try와, 마무리하는이 오류를 잡을 수 있기 때문에 그래서에만 버그를 발견 한 오후를 찾습니다. 그것은 시로의 대략 또한 SSM 같은과 통합,하지만 우리는 web.xml의 일부 구성 정보를 추가해야됩니다.
특정 유사한 처리합니다.
@SpringBootApplication (scanBasePackages = "cn.zhq" ) @EntityScan를 ( "cn.zhq.system.entity" ) 공용 클래스 MyBlogApplication { 공공 정적 무효 메인 (문자열 []에 args) { SpringApplication.run (MyBlogApplication. 클래스 ); } }
영역 도메인을 사용자 정의합니다
개인적 영역에서 데이터 소스에 해당한다고 생각, 시로 영역에서 일부 데이터를 얻기 위해, 확인하는 인증 및 사용자의 권한 부여.
3.1 usermapper 인터페이스
@Mapper 공용 인터페이스 UserMapper { / ** * 데이터 사용자에 따르면 이름 쿼리 * / SYSUSER 경우 FindByName (문자열 사용자 이름); }
3.2 개요 usermapper.xml
<? XML 버전 = "1.0" "UTF-8"인코딩 =?> <DOCTYPE 매퍼 PUBLIC! "- // mybatis.org//DTD 매퍼 3.0 // EN ' 'http://mybatis.org/dtd/mybatis -3- mapper.dtd "> <매퍼 스페이스 ="cn.zhq.system.mapper.UserMapper "> <SELECT ID ="경우 FindByName "resultType ="SYSUSER "parameterType ="문자열 "> 선택 * tb_user 곳에서 자명 = # {사용자 이름} </ 선택> </ 매퍼>
3.3 쓰기 사용자 정의 영역 및 상속 AuthorizingRealm
유일한 인증 방법은 여기에 게시 됨.
@Autowired 개인 UserMapper UserMapper; @Override는 보호 AuthenticationInfo doGetAuthenticationInfo (인증 토큰 인증 토큰)이 발생 포함한 AuthenticationException { // 로그인 사용자 이름과 암호 (토큰)에 대한 1. UsernamePasswordToken upToken = (UsernamePasswordToken) 인증 토큰 문자열 사용자 이름 = upToken.getUsername (); 문자열 암호 = 새로운 새 문자열 (upToken.getPassword ()); // 2 데이터베이스 사용자 이름 조회에있어서 SYSUSER 사용자에게 = userMapper.findByName (사용자 이름); // 사용자가 본 3인지 암호는 동일하다. IF (! 사용자 = 널 (null) && user.getPassword () 등호 (비밀번호).) { // 4. 보안 데이터의 일관성을 반환하는 경우 // 생성자 : 데이터 보안, 암호 영역 도메인 SimpleAuthenticationInfo 정보 = 새로운 새로운 SimpleAuthenticationInfo (사용자, 사용자가. 하려면 getPassword () 은이 .getName ()); 반환 정보; } // 5. 일관성, 반환 널 (던져) 반환 널 (null) ; }
시로 구성 클래스 제 담
보안 관리자 4.1
// 구성 사용자 정의 영역 @Bean 공공 AUTHREALM getRealm () { 반환 새 새 ) (AUTHREALM를; } // 구성 보안 관리자 @Bean 공공 SecurityManager의 보안 관리자 (AUTHREALM 영역) { // 기본 보안 관리자 DefaultWebSecurityManager 보안 관리자 = 새로운 새로운 DefaultWebSecurityManager (영역); // 보안 관리자 통합 관리에 대한 사용자 정의 영역 securityManager.setRealm (영역); 반환 보안 관리자; }
4.2를 구성한다 필터 공장
@Bean 공공 ShiroFilterFactoryBean shiroFilter (SecurityManager의 보안 관리자) { // 1. 필터 공장 만들 ShiroFilterFactoryBean FilterFactory = 새로운 새로운 ShiroFilterFactoryBean을 (); // 2. 보안 관리자 세트 filterFactory.setSecurityManager (보안 관리자); // 3. 일반 구성을 (점프 공인 점프 페이지 로그인 페이지) filterFactory.setLoginUrl ( "#"); // 점프 URL 주소 filterFactory.setUnauthorizedUrl ( "#"); // 인증되지 않은 URL을 반환 FilterFactory; }
5. 쓰기 제어 방법
(값 = "/ 로그인"@RequestMapping ) @ResponseBody 공공 문자열 로그인 (문자열 이름, 문자열 암호) { 시도 { 주제 제목 = SecurityUtils.getSubject를 (); UsernamePasswordToken uptoken = 새로운 UsernamePasswordToken (사용자 이름, 암호); subject.login (uptoken); 반환 "을登录成功" ; } 캐치 (예외 전자) { 반환 "用户名或密码错误" ; } }
6. 로그인
6.1 MD5 암호화 된 암호를 얻기
암호를 사용하여 암호화되어 있기 때문에 MD5 방식의 시로를 제공합니다. 직접 인쇄 비밀번호 암호화 한 후 문제를 방지하려면.
소금 (암호화 된 문자열 혼동) | | 암호화 배 매개 변수의 의미는 Md5Hash 암호화 된 컨텐츠를 표시됩니다
에서 System.out.println ( 새로운 Md5Hash ( "123456", "zhangbo", 3)로 .toString ());
당신은 암호화 된 암호의 사용이 성공적으로 착륙 할 수 있습니다 볼 수 있지만 원래 암호를 사용하여 착륙 성공하지 수 패스워드가 암호화되어있는 사용자의 특정 비즈니스 로직을 추가 할 수 있습니다.