ホームページ  >  記事  >  Java  >  SpringBootにShiroを統合する方法

SpringBootにShiroを統合する方法

WBOY
WBOY転載
2023-05-17 23:01:101030ブラウズ

ネイティブ統合

プロジェクトの作成

Spring Boot プロジェクトを作成するには、Web 依存関係を追加するだけです:

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 の白と同じなので、詳細には立ち入りません。ここでの認証とは、ユーザー名が javaboy であり、ユーザーのパスワードが 123 である必要があることを意味します。これらの条件が満たされていれば、正常にログインできます。

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>

Shiro をここで構成すると、主に 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 インターフェイスにアクセスします。ログインしていないため、自動的にJump /login インターフェイスに移動します:

SpringBootにShiroを統合する方法

次に、/doLogin インターフェイスを呼び出してログインを完了します:

SpringBootにShiroを統合する方法

Visit /hello インターフェイスに再度アクセスできます:

SpringBootにShiroを統合する方法

Shiro Starter を使用します

上記の設定方法は、実際には次の設定と同じです。 SSMのXMLをSpring Bootを取得してJavaコードに書き換える この方法以外にも、Shiroが公式に提供しているStarterを直接利用することもできます。

上記と同じようにプロジェクトを作成します

作成が成功したら、hiro-spring-boot-web-starter を追加します。この依存関係は前の # を置き換えることができます。 ##hiro -webhiro-spring の 2 つの依存関係の場合、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

The Realm と It は以前と同じなので、詳細は説明しません。

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
設定説明:

  • 最初の行は、cookie に sessionId を入れることが許可されているかどうかを示します。

  • 2 行目は、cookie に sessionId を入れることが許可されるかどうかを示します。 URL アドレス ブロック

  • 3 行目は、不正なページにアクセスするときのデフォルトのジャンプ パスを示します

  • ##4 行目は、hiro
  • # を有効にすることを示します

    ##5 行目はログイン成功のためのジャンプ ページを示します
  • 6 行目はログイン ページを示します
  • ConfigureしろConfig
@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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。