봄 부팅 통합 보안 프레임 워크 시로의 프로젝트 시작 봄 부팅 (B)

비문이 : 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 ());

 

 

 

 

 

당신은 암호화 된 암호의 사용이 성공적으로 착륙 할 수 있습니다 볼 수 있지만 원래 암호를 사용하여 착륙 성공하지 패스워드가 암호화되어있는 사용자의 특정 비즈니스 로직을 추가 할 수 있습니다.

 

추천

출처www.cnblogs.com/Code-Handling/p/11921477.html