SSH整合Shiro

40 篇文章 0 订阅
30 篇文章 0 订阅

SSH整合Shiro

环境配置:SSH框架,Shiro框架

一、搭建SSH框架,结构如下图:

二、导入几个依赖(整合ssh与shiro的依赖):

<!--引入shiro核心依赖shiro-core-->

         <dependency>

                  <groupId>org.apache.shiro</groupId> 

                  <artifactId>shiro-core</artifactId>       

                  <version>1.3.2</version>

         </dependency>



         <!--引入shiro对web支持的依赖shiro-web-->

         <dependency>

                  <groupId>org.apache.shiro</groupId>

                  <artifactId>shiro-web</artifactId>

                  <version>1.3.2</version>

         </dependency>



         <!--引入shiro对spring支持的依赖shiro-spring-->

         <dependency>

                  <groupId>org.apache.shiro</groupId>

                  <artifactId>shiro-spring</artifactId>

                  <version>1.3.2</version>

         </dependency>

 

三、创建shiro包,创建自定义relam

public class MyRealm extends AuthorizingRealm{



         private IUsersBiz iusersBiz;

        



         public IUsersBiz getIusersBiz() {

                  return iusersBiz;

         }

         public void setIusersBiz(IUsersBiz iusersBiz) {

                  this.iusersBiz = iusersBiz;

         }

         //授权

         @Override

         protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

                  return null;

         }



         //认证

         @Override

         protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

                 

                  //获取传递过来的数据

                  UsernamePasswordToken usernamePasswordToken=(UsernamePasswordToken) token;

                  String uname=usernamePasswordToken.getUsername();

                  String upass=usernamePasswordToken.getPassword().toString();

                  System.out.println("认证:"+uname+" "+upass);

                  //查询数据库

                  List<Users> list = iusersBiz.getUsersByUsernameAndPassword(uname, upass);

                  String pwd=null;

                  if(list.size()!=0&&list!=null) {

                          pwd=list.get(0).getPassword();

                  }

                  //认证,把认证的结果 返回

                  SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo(uname, pwd, this.getName());

                  //用户名不存在,返回null

            //参数一:期望登陆后,保存在subject中的信息

            //参数二:密码,如果返回为null,说明用户不存在

            //参数三:realm名称

                  return simpleAuthenticationInfo;

         }



}

建立MyRealm这个类之后,就继承AuthorizingRealm

重写两个方法,doGetAuthorizationInfo(授权) doGetAuthenticationInfo(认证), 先执行认证,在执行授权:

四、创建shiro的配置文件applicationContext-shiro.xml

  1. 配置自定义realm
<!--3. 配置自定义realm-->

         <bean id="myRealm" class="com.liuyongqi.SSHShiro.shiro.MyRealm">

                  <property name="iusersBiz" ref="usersBizImpl"></property>

         </bean>

 

2.配置SecurityManager

 

 

<!--2.配置SecurityManager-->

         <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

                  <property name="realm" ref="myRealm"></property>

         </bean>

 

3.配置shiroFilter过滤器

<!--1.配置shiroFilter过滤器-->

         <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

                  <!--引入SecurityManager-->

                  <property name="securityManager" ref="securityManager"></property>

                  <!-- 配置登录页面 -->

                  <property name="loginUrl" value="/add.jsp"></property>

                  <!--成功页面-->

                  <property name="successUrl" value="/success.jsp"></property>

                  <!--过滤  -->

                  <!-- 

                  anon未认证可以访问

authc认证后可以访问

perms需要特定权限才能访问

roles需要特定角色才能访问

user需要特定用户才能访问

port需要特定端口才能访问(不常用)

rest根据指定HTTP请求才能访问(不常用)

    *文件夹中的全部文件

    **  文件夹中的全部文件(含子文件夹)-->

                  <property name="filterChainDefinitions">

                          <value>

                                   /add.jsp*=anon

                                   /success.jsp*=authc

                          </value>

                  </property>

         </bean>

 

五、配置web.Xml

<!-- 配置shiro过滤器:必须配置到Struts2前面 -->

<!-- 加载shiro -->

   <filter>

      <filter-name>shiroFilter</filter-name>

      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

   </filter> 

  

   <filter-mapping>

      <filter-name>shiroFilter</filter-name>

      <url-pattern>/*</url-pattern>

   </filter-mapping>

 

如果出现报错,把shiro中的filter-mapping的位置放到struts2filter-mapping的位置的前面

六、创建jsp页面

七、创建action

 

public class LoginAction {

         private Users users;

         private IUsersBiz iusersBiz;

         public Users getUsers() {

                  return users;

         }

         public void setUsers(Users users) {

                  this.users = users;

         }

         public IUsersBiz getIusersBiz() {

                  return iusersBiz;

         }

         public void setIusersBiz(IUsersBiz iusersBiz) {

                  this.iusersBiz = iusersBiz;

         }

        

         public String islogin() throws Exception{

                  System.out.println(users);

                  //通过SecurityUtils得到subject

                  Subject subject = SecurityUtils.getSubject();

                  //实例化一个令牌,把用户名和密码放入其中

                  UsernamePasswordToken token = new UsernamePasswordToken(users.getUsername(),users.getPassword());

                  try {

                          //会自动去MyRealm这个类中的doGetAuthenticationInfo和doGetAuthorizationInfo方法走一走,验证并授权

                          subject.login(token);

                  } catch (Exception e) {

                          // TODO: handle exception

                          e.printStackTrace();

                          return "add";

                  }

                  return "success";            

         }

        



}

配置struts.xml文件

 

<struts>

   <package name="mya" extends="struts-default">

   <global-allowed-methods>regex:.*</global-allowed-methods>

               <!-- 注意:class的值不再是一个类的全栈名,而是<bean>中的id -->

               <!-- 通配符 -->

               <action name="*_*" class="{2}Action" method="{1}">

                       <result name="success" type="redirect">/success.jsp</result>

                       <result name="add" type="redirect">/add.jsp</result>

               </action>

              

   </package>

</struts>

八、启动tomact,测试

测试成功

测试失败:

又回到了原页面:

测试没有权限访问:

回车:

没有权限访问,回到登录页面

 

如果大家想浏览我的下一篇文章,请留言

版权声明:此文章属于原创,不准随意转载:https://blog.csdn.net/LYQ2332826438

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银色亡灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值