在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro。
在 Spring Boot 中整合 Shiro ,有两种不同的方案:
这里演示第二种,因之后大多数都是用注解来进行开发
<!--主要的依赖--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 2、创建Realm 定义我们自己的Realm public class ShiroRealm extends AuthorizingRealm{ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO Auto-generated method stub return null; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); if(!"xiaobear".equals(username)) { throw new org.apache.shiro.authc.UnknownAccountException("用户名不存在!"); return new org.apache.shiro.authc.SimpleAuthenticationInfo(username,"123456",getName()); 在 Realm 中实现简单的认证操作即可,不做授权,授权的具体写法和 SSM 中的 Shiro 一样,不赘述。这里的认证表示用户名必须是xiaobear,用户密码必须是123456 ,满足这样的条件,就能登录成功! 3、配置Shiro @Configuration public class ShiroConfig { @Bean ShiroRealm shiroRealm() { return new ShiroRealm(); @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(shiroRealm()); return defaultWebSecurityManager; @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 在这里进行 Shiro 的配置主要配置 3 个 Bean : 首先需要提供一个 Realm 的实例。需要配置一个 DefaultWebSecurityManager,在 SecurityManager 中配置 Realm。配置一个ShiroFilterChainDefinition ,在 ShiroFilterChainDefinition 中指定路径拦截规则等。配置登录和测试接口。 4、配置Shiro的基本信息 shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
<!--主要的依赖--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2、创建Realm 定义我们自己的Realm public class ShiroRealm extends AuthorizingRealm{ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO Auto-generated method stub return null; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); if(!"xiaobear".equals(username)) { throw new org.apache.shiro.authc.UnknownAccountException("用户名不存在!"); return new org.apache.shiro.authc.SimpleAuthenticationInfo(username,"123456",getName()); 在 Realm 中实现简单的认证操作即可,不做授权,授权的具体写法和 SSM 中的 Shiro 一样,不赘述。这里的认证表示用户名必须是xiaobear,用户密码必须是123456 ,满足这样的条件,就能登录成功! 3、配置Shiro @Configuration public class ShiroConfig { @Bean ShiroRealm shiroRealm() { return new ShiroRealm(); @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(shiroRealm()); return defaultWebSecurityManager; @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 在这里进行 Shiro 的配置主要配置 3 个 Bean : 首先需要提供一个 Realm 的实例。需要配置一个 DefaultWebSecurityManager,在 SecurityManager 中配置 Realm。配置一个ShiroFilterChainDefinition ,在 ShiroFilterChainDefinition 中指定路径拦截规则等。配置登录和测试接口。 4、配置Shiro的基本信息 shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
定义我们自己的Realm
public class ShiroRealm extends AuthorizingRealm{ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO Auto-generated method stub return null; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); if(!"xiaobear".equals(username)) { throw new org.apache.shiro.authc.UnknownAccountException("用户名不存在!"); return new org.apache.shiro.authc.SimpleAuthenticationInfo(username,"123456",getName()); 在 Realm 中实现简单的认证操作即可,不做授权,授权的具体写法和 SSM 中的 Shiro 一样,不赘述。这里的认证表示用户名必须是xiaobear,用户密码必须是123456 ,满足这样的条件,就能登录成功! 3、配置Shiro @Configuration public class ShiroConfig { @Bean ShiroRealm shiroRealm() { return new ShiroRealm(); @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(shiroRealm()); return defaultWebSecurityManager; @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 在这里进行 Shiro 的配置主要配置 3 个 Bean : 首先需要提供一个 Realm 的实例。需要配置一个 DefaultWebSecurityManager,在 SecurityManager 中配置 Realm。配置一个ShiroFilterChainDefinition ,在 ShiroFilterChainDefinition 中指定路径拦截规则等。配置登录和测试接口。 4、配置Shiro的基本信息 shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
public class ShiroRealm extends AuthorizingRealm{ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO Auto-generated method stub return null; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); if(!"xiaobear".equals(username)) { throw new org.apache.shiro.authc.UnknownAccountException("用户名不存在!"); return new org.apache.shiro.authc.SimpleAuthenticationInfo(username,"123456",getName()); 在 Realm 中实现简单的认证操作即可,不做授权,授权的具体写法和 SSM 中的 Shiro 一样,不赘述。这里的认证表示用户名必须是xiaobear,用户密码必须是123456 ,满足这样的条件,就能登录成功!
在 Realm 中实现简单的认证操作即可,不做授权,授权的具体写法和 SSM 中的 Shiro 一样,不赘述。这里的认证表示用户名必须是xiaobear,用户密码必须是123456 ,满足这样的条件,就能登录成功!
3、配置Shiro @Configuration public class ShiroConfig { @Bean ShiroRealm shiroRealm() { return new ShiroRealm(); @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(shiroRealm()); return defaultWebSecurityManager; @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 在这里进行 Shiro 的配置主要配置 3 个 Bean : 首先需要提供一个 Realm 的实例。需要配置一个 DefaultWebSecurityManager,在 SecurityManager 中配置 Realm。配置一个ShiroFilterChainDefinition ,在 ShiroFilterChainDefinition 中指定路径拦截规则等。配置登录和测试接口。 4、配置Shiro的基本信息 shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
@Configuration public class ShiroConfig { @Bean ShiroRealm shiroRealm() { return new ShiroRealm(); @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(shiroRealm()); return defaultWebSecurityManager; @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 在这里进行 Shiro 的配置主要配置 3 个 Bean : 首先需要提供一个 Realm 的实例。需要配置一个 DefaultWebSecurityManager,在 SecurityManager 中配置 Realm。配置一个ShiroFilterChainDefinition ,在 ShiroFilterChainDefinition 中指定路径拦截规则等。配置登录和测试接口。 4、配置Shiro的基本信息 shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
@Configuration public class ShiroConfig { @Bean ShiroRealm shiroRealm() { return new ShiroRealm(); @Bean DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(shiroRealm()); return defaultWebSecurityManager; @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 在这里进行 Shiro 的配置主要配置 3 个 Bean : 首先需要提供一个 Realm 的实例。需要配置一个 DefaultWebSecurityManager,在 SecurityManager 中配置 Realm。配置一个ShiroFilterChainDefinition ,在 ShiroFilterChainDefinition 中指定路径拦截规则等。配置登录和测试接口。
在这里进行 Shiro 的配置主要配置 3 个 Bean :
4、配置Shiro的基本信息 shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro 5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
shiro: sessionManager: sessionIdCookieEnabled: true sessionIdUrlRewritingEnabled: true loginUrl: /login successUrl: /index unauthorizedUrl: /unauthorized web: enabled: true sessionIdCookieEnabled:表示是否允许将sessionId 放到 cookie 中sessionIdUrlRewritingEnabled:表示是否允许将 sessionId 放到 Url 地址拦中loginUrl:表示登录页面successUrl:表示登录成功的跳转页面unauthorizedUrl:表示访问未获授权的页面时,默认的跳转路径web: enabled:表示开启 shiro
5、Controller @RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
@RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!"; 6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
@RestController public class LoginController { @PostMapping("/login") public void login(String username,String password) { Subject subject = SecurityUtils.getSubject(); try { subject.login(new org.apache.shiro.authc.UsernamePasswordToken(username, password)); System.out.println("登录成功!"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录失败!"); @GetMapping("/hello") public String hello() { return "hello"; @GetMapping("/tologin") public String login() { return "please login!";
6、遇到的错误 1、There is no filter with name ‘anno’ to apply to chain 解决办法:无访问权限直接访问的配置不是“anno”而是“anon” @Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
解决办法:无访问权限直接访问的配置不是“anno”而是“anon”
@Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition; 2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
@Bean ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition(); defaultShiroFilterChainDefinition.addPathDefinition("/login", "anon"); defaultShiroFilterChainDefinition.addPathDefinition("/**", "authc"); return defaultShiroFilterChainDefinition;
2、(No bean of type ‘org.apache.shiro.realm.Realm’ found),Spring Boot不自动载入配置 解决办法: 首先检查自己是否在配置类上有@Configuration 其次是否有@Bean注解 网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考 @SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})
解决办法:
首先检查自己是否在配置类上有@Configuration
其次是否有@Bean注解
网上教程说排除三个类就可以了,但这个我没遇到过,仅供参考
@SpringBootApplication(exclude = {ShiroAnnotationProcessorAutoConfiguration.class, ShiroAutoConfiguration.class, ShiroBeanAutoConfiguration.class})