Shiro の概要
Apache Roku は、認証、認可、パスワード管理、セッション管理などの機能を提供するオープンソースの軽量 Java セキュリティ フレームワークです。 Spring Security と比較して、Shiro フレームワークはより直感的で使いやすく、堅牢なセキュリティも提供します。
従来の SSM フレームワークでは、Shiro を手動で統合するための設定手順がまだ多くあります。Spring Boot の場合、Shiro は Spring Boot の設定を簡素化するために hiro-spring-boot-web-starter を正式に提供しています。
Shiro の統合
1. プロジェクトの作成
最初に通常の Spring Boot Web プロジェクトを作成し、Shiro の依存関係とページ テンプレートの依存関係を追加します
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>com.github.theborakompanioni</groupId> <artifactId>thymeleaf-extras-shiro</artifactId> <version>2.0.0</version> </dependency>
ここにはありませんspring-boot-starter-web の依存関係を追加する必要があります。hiro-spring-boot-web-starter はすでに spring-boot-starter-web に依存しています。同時に、ここでは Thymeleaf テンプレートを使用しますが、Thymeleaf で hiro タグを使用するために、thymeleaf-extras-hiro 依存関係が追加されます。
2.Shiro の基本設定
application.properties で Roku の基本情報を設定します
#Shiro の設定を有効にします (デフォルトは true
hiro)。有効 =true
# シロ Web 設定を有効にします。デフォルトは true
hiro.web.enabled=true
# ログイン アドレスを設定します。デフォルトは /login.jsp
shiro.loginUrl=/ です。 login
# ログインに成功した場合のアドレスを設定します。デフォルトは /
hiro.successUrl=/index
# 未承認のデフォルトジャンプアドレス
hiro.unauthorizedUrl=/unauthorized
# セッションを許可するかどうかURL パラメータを使用した追跡。Web サイトが Cookie をサポートしている場合は、このオプションをオフにできます。デフォルトは true
hiro.sessionManager.sessionIdUrlRewritingEnabled=true
# Cookie によるセッション追跡を許可するかどうか。デフォルトは true
shiro.sessionManager.sessionIdCookieEnabled=true
次に、Java コードでhiro を設定し、2 つの最も基本的な Bean を提供します。
@Configuration public class ShiroConfig { @Bean public Realm realm() { TextConfigurationRealm realm = new TextConfigurationRealm(); realm.setUserDefinitions("sang=123,user\n admin=123,admin"); realm.setRoleDefinitions("admin=read,write\n user=read"); return realm; } @Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition(); chainDefinition.addPathDefinition("/login", "anon"); chainDefinition.addPathDefinition("/doLogin", "anon"); chainDefinition.addPathDefinition("/logout", "logout"); chainDefinition.addPathDefinition("/**", "authc"); return chainDefinition; } @Bean public ShiroDialect shiroDialect() { return new ShiroDialect(); } }
コードの説明:
ここで提供されます 2 つのキー Bean があります。1 つは Realm で、もう 1 つはShiroFilterChainDefinition です。また、ShiroDialect に関しては、Thymeleaf での Shir タグの使用をサポートするためのものです。Thymeleaf で Shiro タグを使用しない場合は、ShiroDialect を提供する必要はありません。
Realm はカスタムにすることができますレルムまたはシロ 提供されたレルムでは、簡素化するために、ここではデータベース接続は構成されていません。2 人のユーザーが直接構成されています: sing/123 と admin/123 で、それぞれ user と admin のロールに対応します。
ShiroFilterChainDefinition Beanには基本的なフィルタリングルールが設定されています。「/login」と「/doLogin」は匿名でアクセスできます。「/logout」はログアウトリクエスト、その他のリクエストは認証されます。アクセスする前に必要です
次に、ログイン インターフェイスとページ アクセス インターフェイスを構成します
@Controller public class UserController { @PostMapping("/doLogin") public String doLogin(String username, String password, Model model) { UsernamePasswordToken token = new UsernamePasswordToken(username, password); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); } catch (AuthenticationException e) { model.addAttribute("error", "用户名或密码输入错误!"); return "login"; } return "redirect:/index"; } @RequiresRoles("admin") @GetMapping("/admin") public String admin() { return "admin"; } @RequiresRoles(value = {"admin", "user"}, logical = Logical.OR) @GetMapping("/user") public String user() { return "user"; } }
コードの説明:
doLogin メソッド内、最初に UsernamePasswordToken インスタンスを構築し、次に Subject オブジェクトを取得し、オブジェクト内の login メソッドを呼び出してログイン操作を実行します。ログイン操作の実行中に例外がスローされた場合、ログインが失敗したことを意味し、エラーが発生します。メッセージがログイン ビューに返されます。ログインが成功すると、「/index」にリダイレクトされます。
次に、2 つのインターフェイス「/admin」と「/user」が公開されます。 「/admin」インターフェイスには、管理者ロールのみがアクセスできます。「/user」インターフェイスの場合は、管理者ロールまたはユーザー ロールがあればアクセスできます
ロールなしでアクセスできる他のインターフェイスについては、WebMvc で直接設定するだけです
@Configuration public class WebMvcConfig implements WebMvcConfigurer{ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/login").setViewName("login"); registry.addViewController("/index").setViewName("index"); registry.addViewController("/unauthorized").setViewName("unauthorized"); } }
次に、グローバル例外処理用のグローバル例外ハンドラーを作成します。これは主に承認例外を処理するためです。
@ControllerAdvice public class ExceptionController { @ExceptionHandler(AuthorizationException.class) public ModelAndView error(AuthorizationException e) { ModelAndView mv = new ModelAndView("unauthorized"); mv.addObject("error", e.getMessage()); return mv; } }ユーザーが未承認のリソースにアクセスすると、未承認のビューにジャンプし、エラー メッセージが表示されます。 設定が完了したら、最後にテスト用にリソース/テンプレート ディレクトリに 5 つの HTML ページを作成します。 (1)index.html
<!DOCTYPE html> <html lang="en" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h4 id="Hello-nbsp-shiro-principal">Hello, <shiro:principal/></h4> <h4 id="a-nbsp-href-logout-nbsp-rel-external-nbsp-nofollow-nbsp-注销登录-a"><a href="/logout" rel="external nofollow" >注销登录</a></h4> <h4 id="a-nbsp-shiro-hasRole-admin-nbsp-href-admin-nbsp-rel-external-nbsp-nofollow-nbsp-管理员页面-a"><a shiro:hasRole="admin" href="/admin" rel="external nofollow" >管理员页面</a></h4> <h4 id="a-nbsp-shiro-hasAnyRoles-admin-user-nbsp-href-user-nbsp-rel-external-nbsp-nofollow-nbsp-普通用户页面-a"><a shiro:hasAnyRoles="admin,user" href="/user" rel="external nofollow" >普通用户页面</a></h4> </body> </html>(2)login.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <form action="/doLogin" method="post"> <input type="text" name="username"><br> <input type="password" name="password"><br> <div th:text="${error}"></div> <input type="submit" value="登录"> </form> </div> </body> </html>(3)user.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2 id="普通用户页面">普通用户页面</h2> </body> </html>(4)管理者。 html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2 id="管理员页面">管理员页面</h2> </body> </html>(5) 無許可.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <h4 id="未获授权-非法访问">未获授权,非法访问</h4> <h4 th:text="${error}"></h4> </div> </body> </html>3. テストプロジェクトを開始し、ログイン ページにアクセスし、sang/123 を使用してログインします
以上がSpringBootセキュリティ管理のShiroフレームワークの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

前言SSE简单的来说就是服务器主动向前端推送数据的一种技术,它是单向的,也就是说前端是不能向服务器发送数据的。SSE适用于消息推送,监控等只需要服务器推送数据的场景中,下面是使用SpringBoot来实现一个简单的模拟向前端推动进度数据,前端页面接受后展示进度条。服务端在SpringBoot中使用时需要注意,最好使用SpringWeb提供的SseEmitter这个类来进行操作,我在刚开始时使用网上说的将Content-Type设置为text-stream这种方式发现每次前端每次都会重新创建接。最

Canal工作原理Canal模拟MySQLslave的交互协议,伪装自己为MySQLslave,向MySQLmaster发送dump协议MySQLmaster收到dump请求,开始推送binarylog给slave(也就是Canal)Canal解析binarylog对象(原始为byte流)MySQL打开binlog模式在MySQL配置文件my.cnf设置如下信息:[mysqld]#打开binloglog-bin=mysql-bin#选择ROW(行)模式binlog-format=ROW#配置My

一、手机扫二维码登录的原理二维码扫码登录是一种基于OAuth3.0协议的授权登录方式。在这种方式下,应用程序不需要获取用户的用户名和密码,只需要获取用户的授权即可。二维码扫码登录主要有以下几个步骤:应用程序生成一个二维码,并将该二维码展示给用户。用户使用扫码工具扫描该二维码,并在授权页面中授权。用户授权后,应用程序会获取一个授权码。应用程序使用该授权码向授权服务器请求访问令牌。授权服务器返回一个访问令牌给应用程序。应用程序使用该访问令牌访问资源服务器。通过以上步骤,二维码扫码登录可以实现用户的快

1.springboot2.x及以上版本在SpringBoot2.xAOP中会默认使用Cglib来实现,但是Spring5中默认还是使用jdk动态代理。SpringAOP默认使用JDK动态代理,如果对象没有实现接口,则使用CGLIB代理。当然,也可以强制使用CGLIB代理。在SpringBoot中,通过AopAutoConfiguration来自动装配AOP.2.Springboot1.xSpringboot1.xAOP默认还是使用JDK动态代理的3.SpringBoot2.x为何默认使用Cgl

我们使用jasypt最新版本对敏感信息进行加解密。1.在项目pom文件中加入如下依赖:com.github.ulisesbocchiojasypt-spring-boot-starter3.0.32.创建加解密公用类:packagecom.myproject.common.utils;importorg.jasypt.encryption.pbe.PooledPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.SimpleStrin

知识准备需要理解ApachePOI遵循的标准(OfficeOpenXML(OOXML)标准和微软的OLE2复合文档格式(OLE2)),这将对应着API的依赖包。什么是POIApachePOI是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供API给Java程序对MicrosoftOffice格式档案读和写的功能。POI为“PoorObfuscationImplementation”的首字母缩写,意为“简洁版的模糊实现”。ApachePOI是创建和维护操作各种符合Offic

一、springboot与mybatis的配置1.首先,springboot配置mybatis需要的全部依赖如下:org.springframework.bootspring-boot-starter-parent1.5.1.RELEASEorg.springframework.bootspring-boot-starter-web1.5.1.RELEASEorg.mybatis.spring.bootmybatis-spring-boot-starter1.2.0com.oracleojdbc

1.首先新建一个shiroConfigshiro的配置类,代码如下:@ConfigurationpublicclassSpringShiroConfig{/***@paramrealms这儿使用接口集合是为了实现多验证登录时使用的*@return*/@BeanpublicSecurityManagersecurityManager(Collectionrealms){DefaultWebSecurityManagersManager=newDefaultWebSecurityManager();


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック



