ホームページ >Java >&#&チュートリアル >SpringBootにShiroを統合する方法
ネイティブ統合
プロジェクトの作成
Spring Boot プロジェクトを作成するには、Web 依存関係を追加するだけです:
プロジェクトが正常に作成されたら、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 インターフェイスに移動します:
次に、/doLogin インターフェイスを呼び出してログインを完了します:
Visit /hello インターフェイスに再度アクセスできます:
Shiro Starter を使用します
上記の設定方法は、実際には次の設定と同じです。 SSMのXMLをSpring Bootを取得してJavaコードに書き換える この方法以外にも、Shiroが公式に提供しているStarterを直接利用することもできます。
上記と同じようにプロジェクトを作成します
作成が成功したら、hiro-spring-boot-web-starter
を追加します。この依存関係は前の # を置き換えることができます。 ##hiro -web と
hiro-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設定説明:
@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 サイトの他の関連記事を参照してください。