spring boot 통합 shiro 안전 프레임 워 크 프로 세 스 분석

이 글 은 주로 spring boot 통합 shiro 안전 프레임 워 크 과정 분석 을 소개 하 였 으 며,예시 코드 를 통 해 매우 상세 하 게 소개 하 였 으 며,여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 며,필요 한 분 들 은 참고 하 시기 바 랍 니 다.
제목:springboot 과 thymeleaf 를 공부 한 후에 하나의 프로젝트 연습 자 를 완성 하고 싶 어서 springboot+my batis 와 thymeleaf 를 사용 하여 블 로그 시스템 을 완성 하고 완성 하 는 과정 에서 발생 하 는 문제 들 을 기록 하여 자신의 학습 소감 으로 삼 았 다.여기 서 먼저 군주 TyCoding 의 Tumo 프로젝트 에 감 사 를 드 립 니 다.저 는 너무 요리 가 많아 서 잘 모 르 겠 지만 저 에 게 많은 도움 을 주 었 습 니 다.
shiro 는 작고 유연 한 안전 구조 로 서 인증 과 권한 수여 에 있어 심 플 하지만 간단 하지 않 아 쉽게 사용 할 수 있 습 니 다.다음은 shiro 를 통합 하 는 구체 적 인 절차 입 니 다.
1.의존 도 추가

<!--shiro spring  -->
<dependency>
   <groupId>org.apache.shiro</groupId>
   <artifactId>shiro-spring</artifactId>
   <version>1.3.2</version>
</dependency>
<!--shiro   -->
<dependency>
   <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.3.2</version>
</dependency>
2.springboot 콘 솔 에 기본 패키지 의 스 캔 과 실체 류 의 스 캔 주 해 를 추가 합 니 다.
본인 이 정말 부주의 해서 try,catch 로 이 잘못 을 쌌 기 때문에 오후 bug 를 찾 아 보 았 습 니 다.ssm 로 shiro 를 통합 하 는 것 도 대체적으로 같 습 니 다.웹 xml 에 설정 정 보 를 추가 해 야 합 니 다.
구체 적 인 절 차 는 대동소이 하 다.

@SpringBootApplication(scanBasePackages = "cn.zhq")
@EntityScan("cn.zhq.system.entity")
public class MyBlogApplication {
  public static void main(String[] args) {
    SpringApplication.run(MyBlogApplication.class);
  }
}
3.사용자 정의 영역
개인 적 으로 realm 은 하나의 데이터 소스 에 해당 한다 고 생각 합 니 다.shiro 는 realm 에서 일부 데 이 터 를 얻 고 사용자 의 인증 과 권한 수 여 를 검증 합 니 다.
3.1 usermapper 인터페이스

@Mapper
public interface UserMapper {

  /**
   *   Name      
   */
  SysUser findByName(String username);
}
3.2 프로필 usermapper.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.zhq.system.mapper.UserMapper">
  <select id="findByName" resultType="sysuser" parameterType="String">
   select * from tb_user where username = #{username}
  </select>
</mapper>
3.3 사용자 정의 realm 을 작성 하고 AuthorizingRealm 계승
여기 인증 방법 만 붙 여 놨 어 요.

@Autowired
  private UserMapper userMapper;

  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    //1.          (token)
    UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken;
    String username = upToken.getUsername();
    String password = new String( upToken.getPassword());
    //2.          
    SysUser user = userMapper.findByName(username);
    //3.                
    if(user != null && user.getPassword().equals(password)) {
      //4.          
      //    :    ,  ,realm  
      SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());
      return info;
    }
    //5.   ,  null(    )
    return null;
  }
4.shiro 설정 클래스 작성
4.1 안전 관리자

//      Realm
  @Bean
  public AuthRealm getRealm() {
    return new AuthRealm();
  }

  //       
  @Bean
  public SecurityManager securityManager(AuthRealm realm) {
    //          
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(realm);
    //     realm             
    securityManager.setRealm(realm);
    return securityManager;
  }
4.2 필터 공장 설정

@Bean
  public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
    //1.       
    ShiroFilterFactoryBean filterFactory = new ShiroFilterFactoryBean();
    //2.       
    filterFactory.setSecurityManager(securityManager);
    //3.    (      ,        )
    filterFactory.setLoginUrl("#");//  url  
    filterFactory.setUnauthorizedUrl("#");//    url
    return filterFactory;
  }
5.controller 작성 방법

@RequestMapping(value="/login")
  @ResponseBody
  public String login(String username,String password) {
    try{
      Subject subject = SecurityUtils.getSubject();
      UsernamePasswordToken uptoken = new UsernamePasswordToken(username,password);
      subject.login(uptoken);
      return "    ";
    }catch (Exception e) {
      return "        ";
    }
  }
6.로그 인
6.1 md5 암호 화 된 비밀번호 가 져 오기
비밀 번 호 는 shiro 가 제공 하 는 Md5 암호 화 방식 을 사용 하기 때 문 입 니 다.번 거 로 움 을 피하 기 위해 암호 화 된 비밀 번 호 를 직접 인쇄 합 니 다.

Md5Hash                  |  (        ) |     
System.out.println(new Md5Hash("123456","zhangbo",3).toString());


암호 화 된 비밀 번 호 를 사용 하면 로그 인 에 성공 할 수 있 지만 원본 비밀 번 호 를 사용 하면 로그 인 에 성공 할 수 없습니다.구체 적 인 업무 논리 층 에 사용 자 를 추가 할 때 비밀 번 호 를 암호 화 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기