会员可以在此提问,尚新途老师有问必答

对大家有帮助的问答会被标记为“推荐”,看完课程过来浏览一下别人提的问题,会帮你学得更全面

截止目前,同学们一共提了128829个问题
王某人2021-11-07 20:00:08
package test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

public class Shiro_MD5Test {
    public static void main(String[] args) {
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro_Md5.ini");
        SecurityManager securityManager = factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken("nd", "123456");
        try {
            subject.login(token);
            if (subject.isAuthenticated()){
                System.out.println("登陆成功");
            }
        }catch (Exception e){
            System.out.println("登录失败");
        }
    }
}
package realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserRealm extends AuthorizingRealm {
    //授权方法
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    //认证方法
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8&useSSL=false","root","123456");
            PreparedStatement preparedStatement = connection.prepareStatement("select userpassword from user where username = ?");
            //获取用户输入的用户名,插入到语句中
            preparedStatement.setString(1, (String) authenticationToken.getPrincipal());
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                //根据用户输入的用户名去比较密码是否一致
                SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(authenticationToken.getPrincipal(), resultSet.getString("userpassword"), ByteSource.Util.bytes("lf"), "userRealm");
                //如果有值则返回
                return info;
            }
        }catch (Exception e){
            System.out.println("认证方法异常");
        }
        return null;
    }
}
[main]
credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
#设置加密的类型
credentialsMatcher.hashAlgorithmName=md5
#设置迭代的次数
credentialsMatcher.hashIterations=2

#配置realm
userRealm=realm.UserRealm
userRealm.credentialsMatcher=$credentialsMatcher
securityManager.realms=$userRealm

这个加密是怎么执行的,他们各个语句之间执行顺序是什么,越学越蒙了,麻烦详细说一下

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
王某人2021-11-07 19:01:43

在哪指定我要给密码这个属性进行加密的,而且一般这个加密的方式都是自己编写在shiro文件里的吗?自己编写有什么好处?

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
王某人2021-11-07 18:35:41

image.png

return这个返回的是什么,给谁返回的

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
王某人2021-11-07 09:53:33

image.png

第一句话就报错什么原因

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
路痴2021-11-05 23:43:06

感觉就像一个存常量的Class  

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
Casualed2021-10-29 14:39:08
相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
Casualed2021-10-28 12:58:43
相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
Autism2021-10-22 23:13:18
同楼下,表自动创建了,但是没有任何信息,把视频中的源码也复制过去了,,,同样此问题,,麻烦看下什么问题导致. 源码附近上传了springsecuritydemo.zip
相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Spring Security(旧)
意未央2021-10-20 23:11:39
RBAC相当于是一种思想,shiro相当于RBAC的框架实现,这样理解正确吗
相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
Wiku_10-172021-10-08 10:00:49

image.png

设置跳转的url 时  还会不会走我们配置的视图解析器呢???

如果走的话是不是就不用加.jsp 后缀了

image.png

我的页面跳转控制器是这样的 

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)
情深意重的关老爷2021-09-28 15:26:32
[main]
dataSou=com.mchange.v2.c3p0.ComboPooledDataSource
dataSou.driverClass=com.mysql.jdbc.Driver
dataSou.jdbcUrl=jdbc:mysql://localhost:3306/shiro
dataSou.user=root
dataSou.password=root
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$dataSou
securityManager.realm=$jdbcRealm
package com.bjsxt.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class TestB {
    public static void main(String[] args) {

    //    解析shiro.ini文件
        Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shrio-jdbc.ini");
    //    通过SecurityManger工厂获得SecurityManger对象
        SecurityManager instance = factory.getInstance();
    //    把SecurityManger对象放在运行环境中
        SecurityUtils.setSecurityManager(instance);
    //    通过SecurityManger获得主体subject
        Subject subject = SecurityUtils.getSubject();
    //    书写自己的账号和密码
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("zs","123");

    //    进行比较
        subject.login(usernamePasswordToken);
        if (subject.isAuthenticated()){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }
    }
}

老师,这是我的ini文件和Java文件,当我点击运行之后他就一直运行,也不出来结果

图片.png

相关课程:JAVA 全系列/第九阶段:权限控制与安全认证/Shiro(旧)

©2014-2023 百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备13018289号-12    营业执照    经营许可证:京B2-20212637