Для управления разрешениями в Spring Boot, вообще говоря, основным решением является Spring Security, но с технической точки зрения можно использовать и Shiro.
Сегодня Brother Song расскажет вам об интеграции Shiro со Spring Boot!
В целом Spring Security и Shiro сравниваются следующим образом:
- Spring Security — это мощная среда управления безопасностью; Shiro — облегченная среда управления безопасностью.
- У Spring Security сложная концепция и сложная конфигурация; у Shiro простая концепция и простая конфигурация.
- Spring Security мощный; Shiro простой
- ...
Хотя Shiro имеет простые функции, он также может соответствовать большинству бизнес-сценариев. Так что в традиционные проекты SSM вообще можно интегрировать Shiro.
В Spring Boot, поскольку Spring Boot официально предоставляет большое количество очень удобных готовых Starters, конечно, Spring Security Starters также предоставляется, что упрощает использование Spring Security в Spring Boot, даже просто добавляя Dependencies может защитить все интерфейсы, поэтому, если это проект Spring Boot, обычно выбирается Spring Security.
Это всего лишь предполагаемая комбинация, с чисто технической точки зрения, как бы она ни комбинировалась, проблем нет.
Существует два разных варианта интеграции Shiro в Spring Boot:
- Первый — оставить его нетронутым и переписать конфигурацию SSM, чтобы интегрировать Shiro в Java.
- Второй — использовать стартер, официально предоставленный Широ для настройки, но этот стартер не сильно упрощает настройку.
нативная интеграция
- Создать проект
Чтобы создать проект Spring Boot, просто добавьте веб-зависимости:
После успешного создания проекта добавьте связанные с 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>
- Создать мир
Далее давайте настроим основной компонент 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, если эти условия соблюдены, вы можете успешно войти в систему!
- Настроить Широ
Далее настройте Широ:
@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, String> map = new LinkedHashMap<>();
map.put("/doLogin", "anon");
map.put("/**", "authc");
bean.setFilterChainDefinitionMap(map);
return bean;
}
}
Конфигурация Широ здесь в основном настраивает 3 компонента:
- Сначала вам нужно предоставить экземпляр Realm.
- Необходимо настроить SecurityManager, а 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:
Затем вызовите интерфейс /doLogin для завершения входа:
Снова получите доступ к интерфейсу /hello, и вы сможете успешно получить к нему доступ:
Использование Широ Стартера
Вышеупомянутый метод настройки фактически эквивалентен использованию XML-конфигурации в SSM и переписыванию ее с помощью Java-кода в Spring Boot.В дополнение к этому методу мы также можем напрямую использовать Starter, предоставленный Shiro.
- Создайте проект, как указано выше.
После успешного создания добавьте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>
- Создать мир
Царство здесь такое же, как и предыдущее, так что повторяться не буду.
- Настройка базовой информации Широ
Далее настройте базовую информацию Широ в application.properties:
shiro.sessionManager.sessionIdCookieEnabled=true
shiro.sessionManager.sessionIdUrlRewritingEnabled=true
shiro.unauthorizedUrl=/unauthorizedurl
shiro.web.enabled=true
shiro.successUrl=/index
shiro.loginUrl=/login
Объяснение конфигурации:
- Первая строка указывает, разрешать ли размещение идентификатора sessionId в файле cookie.
- Вторая строка указывает, разрешать ли размещение sessionId в блоке URL.
- Третья строка указывает путь перехода по умолчанию при доступе к неавторизованной странице.
- Четвертая строчка означает включение широ
- Пятая строка представляет собой страницу перехода для успешного входа в систему.
- Шестая строка представляет собой страницу входа
- Настроить ШироКонфиг
@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;
}
}
Конфигурация здесь аналогична предыдущей, но экземпляр ShiroFilterFactoryBean больше не нужен, вместо этого есть ShiroFilterChainDefinition, где вы можете определить правила сопоставления путей Shiro.
После определения здесь следующее определение интерфейса входа и метод тестирования такие же, как и предыдущие, поэтому я не буду их повторять. Вы можете обратиться к вышеизложенному.
Суммировать
В этой статье представлены два способа интеграции Spring Boot с Широ: один — это традиционная версия Java, а другой — Starter, предоставленный официальным лицом Широ, два способа, я не знаю, нужно ли вам учиться?
Случай с этой статьей, я загрузил ее на GitHub, приветствую всех в звездах:GitHub.com/Len VE/Java не…
Если у вас есть какие-либо вопросы по этой статье, пожалуйста, оставьте сообщение для обсуждения.
Обратите внимание на общедоступную учетную запись [Jiangnan A Little Rain], сосредоточьтесь на технологиях с полным стеком, таких как Spring Boot + микросервисы и разделение интерфейса и сервера, делитесь регулярными видеоуроками, отвечайте на Java после того, как уделите внимание, и получайте Сухие товары Java тщательно приготовлены Songge для вас!