>Java >java지도 시간 >SpringBoot에 Shiro를 통합하는 방법

SpringBoot에 Shiro를 통합하는 방법

WBOY
WBOY앞으로
2023-05-17 23:01:101101검색

네이티브 통합

프로젝트 만들기

Spring Boot 프로젝트를 만들려면 웹 종속성을 추가하기만 하면 됩니다.

SpringBoot에 Shiro를 통합하는 방법

프로젝트가 성공적으로 생성된 후 Shiro 관련 종속성을 추가하고 pom.xml 파일을 완성합니다. 종속성은 다음과 같습니다.

<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
    <groupid>org.apache.shiro</groupid>
    <artifactid>shiro-web</artifactid>
    <version>1.4.0</version>
  </dependency>
  <dependency>
    <groupid>org.apache.shiro</groupid>
    <artifactid>shiro-spring</artifactid>
    <version>1.4.0</version>
  </dependency>
</dependencies>

Create Realm

다음으로 핵심 구성 요소인 Realm을 사용자 정의합니다.

public class MyRealm extends AuthorizingRealm {
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    return null;
  }
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    String username = (String) token.getPrincipal();
    if (!"javaboy".equals(username)) {
      throw new UnknownAccountException("账户不存在!");
    }
    return new SimpleAuthenticationInfo(username, "123", getName());
  }
}

인증 없이 Realm에서 간단한 인증 작업을 구현하면 됩니다. 인증의 구체적인 작성 방법은 SSM의 Shiro와 동일합니다. 세부적으로 들어가야 합니다. 여기서 인증한다는 것은 사용자 이름이 javaboy여야 하고 사용자 비밀번호가 123이어야 함을 의미합니다. 이러한 조건이 충족되면 성공적으로 로그인할 수 있습니다!

Configure Shiro

다음으로 Shiro를 구성합니다:

@Configuration
public class ShiroConfig {
  @Bean
  MyRealm myRealm() {
    return new MyRealm();
  }
  
  @Bean
  SecurityManager securityManager() {
    DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
    manager.setRealm(myRealm());
    return manager;
  }
  
  @Bean
  ShiroFilterFactoryBean shiroFilterFactoryBean() {
    ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
    bean.setSecurityManager(securityManager());
    bean.setLoginUrl("/login");
    bean.setSuccessUrl("/index");
    bean.setUnauthorizedUrl("/unauthorizedurl");
    Map<string> map = new LinkedHashMap();
    map.put("/doLogin", "anon");
    map.put("/**", "authc");
    bean.setFilterChainDefinitionMap(map);
    return bean;
  }
}</string>

여기서 주로 3개의 Bean을 구성합니다:

  • 먼저 Realm 인스턴스를 제공해야 합니다.

  • Realm을 구성할 때 SecurityManager에서 설정해야 합니다.

  • ShiroFilterFactoryBean을 구성하고 ShiroFilterFactoryBean에 경로 차단 규칙 등을 지정합니다.

  • 로그인 및 테스트 인터페이스를 구성합니다.

그 중 ShiroFilterFactoryBean은 구성이 조금 더 많은데 구성 의미는 다음과 같습니다.

  • setSecurityManager는 SecurityManager를 지정한다는 의미입니다.

  • setLoginUrl은 지정된 로그인 페이지를 나타냅니다.

  • setSuccessUrl은 지정된 로그인 성공 페이지를 나타냅니다.

  • 경로 차단 규칙은 다음 맵에서 구성해야 합니다.

이러한 사항을 구성한 후 다음으로 로그인 컨트롤러를 구성하세요.

@RestController
public class LoginController {
  @PostMapping("/doLogin")
  public void doLogin(String username, String password) {
    Subject subject = SecurityUtils.getSubject();
    try {
      subject.login(new UsernamePasswordToken(username, password));
      System.out.println("登录成功!");
    } catch (AuthenticationException e) {
      e.printStackTrace();
      System.out.println("登录失败!");
    }
  }
  @GetMapping("/hello")
  public String hello() {
    return "hello";
  }
  @GetMapping("/login")
  public String login() {
    return "please login!";
  }
}

테스트할 때 먼저 /hello 인터페이스에 액세스하세요. 로그인되어 있지 않으므로 자동으로 /login 인터페이스로 이동합니다.

SpringBoot에 Shiro를 통합하는 방법

그런 다음 /doLogin 인터페이스를 호출하면 로그인이 완료됩니다.

SpringBoot에 Shiro를 통합하는 방법

/hello 인터페이스를 다시 방문하면 성공적으로 액세스할 수 있습니다.

SpringBoot에 Shiro를 통합하는 방법

Shiro Starter 사용

위 구성 방법은 실제로 XML 구성과 동일합니다. SSM에서 Spring Boot를 가져와 Java 코드로 다시 작성할 수도 있습니다. 이 방법 외에도 Shiro에서 공식적으로 제공하는 Starter를 직접 사용할 수도 있습니다.

위와 동일하게 프로젝트를 생성합니다

생성 성공 후 shiro-spring-boot-web-starter ,这个依赖可以代替之前的 shiro-web 和 shiro-spring 두 개의 종속성을 추가합니다. pom.xml 파일은 다음과 같습니다.

<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
    <groupid>org.apache.shiro</groupid>
    <artifactid>shiro-spring-boot-web-starter</artifactid>
    <version>1.4.0</version>
  </dependency>
</dependencies>

Create Realm

여기 Realm은 이전과 동일합니다. 자세히 설명하지 마세요.

Shiro 기본 정보 구성

다음으로 application.properties에서 Shiro 기본 정보 구성:

shiro.sessionManager.sessionIdCookieEnabled=true
shiro.sessionManager.sessionIdUrlRewritingEnabled=true
shiro.unauthorizedUrl=/unauthorizedurl
shiro.web.enabled=true
shiro.successUrl=/index
shiro.loginUrl=/login

구성 설명:

  • 첫 번째 줄은 sessionId를 쿠키에 넣을지 여부를 나타냅니다.

  • 두 번째 줄은 Url 주소 블록에 sessionId를 넣을 수 있는지 여부를 나타냅니다. 세 번째 줄은 승인되지 않은 페이지에 액세스할 때 기본 점프 경로를 나타냅니다. 네 번째 줄은 shiro를 활성화할지 여부를 나타냅니다. . 로그인 성공을 나타내는 점프 페이지

  • 여섯 번째 줄은 로그인 페이지를 나타냅니다

  • Configure ShiroConfig

    @Configuration
    public class ShiroConfig {
      @Bean
      MyRealm myRealm() {
        return new MyRealm();
      }
      @Bean
      DefaultWebSecurityManager securityManager() {
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        manager.setRealm(myRealm());
        return manager;
      }
      @Bean
      ShiroFilterChainDefinition shiroFilterChainDefinition() {
        DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();
        definition.addPathDefinition("/doLogin", "anon");
        definition.addPathDefinition("/**", "authc");
        return definition;
      }
    }

위 내용은 SpringBoot에 Shiro를 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제