您好,欢迎访问一九零五行业门户网

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>
创建 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 中的 shiro 一样,不赘述。这里的认证表示用户名必须是 javaboy ,用户密码必须是 123 ,满足这样的条件,就能登录成功!
配置 shiro
接下来进行 shiro 的配置:
@configurationpublic 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;  }}
在这里进行 shiro 的配置主要配置 3 个 bean :
首先需要提供一个 realm 的实例。
在配置 realm 时,需要在 securitymanager 中对其进行设置。
配置一个 shirofilterfactorybean ,在 shirofilterfactorybean 中指定路径拦截规则等。
配置登录和测试接口。
其中,shirofilterfactorybean 的配置稍微多一些,配置含义如下:
setsecuritymanager 表示指定 securitymanager。
setloginurl 表示指定登录页面。
setsuccessurl 表示指定登录成功页面。
接下来的 map 中配置了路径拦截规则,注意,要有序。
这些东西都配置完成后,接下来配置登录 controller:
@restcontrollerpublic 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 接口,就可以成功访问了:
使用 shiro starter
上面这种配置方式实际上相当于把 ssm 中的 xml 配置拿到 spring boot 中用 java 代码重新写了一遍,除了这种方式之外,我们也可以直接使用 shiro 官方提供的 starter 。
创建工程,和上面的一样
创建成功后,添加 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>
创建 realm
这里的 realm 和前面的一样,我就不再赘述。
配置 shiro 基本信息
接下来在 application.properties 中配置 shiro 的基本信息:
shiro.sessionmanager.sessionidcookieenabled=trueshiro.sessionmanager.sessionidurlrewritingenabled=trueshiro.unauthorizedurl=/unauthorizedurlshiro.web.enabled=trueshiro.successurl=/indexshiro.loginurl=/login
配置解释:
第一行表示是否允许将sessionid 放到 cookie 中
第二行表示是否允许将 sessionid 放到 url 地址拦中
第三行表示访问未获授权的页面时,默认的跳转路径
第四行表示开启 shiro
第五行表示登录成功的跳转页面
第六行表示登录页面
配置 shiroconfig
@configurationpublic 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进行整合的详细内容。
其它类似信息

推荐信息