`
jinnianshilongnian
  • 浏览: 21434667 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405078
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2997748
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631488
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257577
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593183
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:248974
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5847568
Group-logo
跟我学Nginx+Lua开...
浏览量:698167
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780468
社区版块
存档分类
最新评论

第五章 编码/加密——《跟我学Shiro》

阅读更多

 

目录贴: 跟我学Shiro目录贴

 

在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。

 

5.1 编码/解码 

Shiro提供了base6416进制字符串编码/解码的API支持,方便一些编码解码操作。Shiro内部的一些数据的存储/表示都使用了base6416进制字符串。

String str = "hello";
String base64Encoded = Base64.encodeToString(str.getBytes());
String str2 = Base64.decodeToString(base64Encoded);
Assert.assertEquals(str, str2); 

通过如上方式可以进行base64编码/解码操作,更多API请参考其Javadoc

String str = "hello";
String base64Encoded = Hex.encodeToString(str.getBytes());
String str2 = new String(Hex.decode(base64Encoded.getBytes()));
Assert.assertEquals(str, str2); 

通过如上方式可以进行16进制字符串编码/解码操作,更多API请参考其Javadoc

 

还有一个可能经常用到的类CodecSupport,提供了toBytes(str, "utf-8") / toString(bytes, "utf-8")用于在byte数组/String之间转换。

 

5.2 散列算法

散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5SHA等。一般进行散列时最好提供一个salt(盐),比如加密密码“admin”,产生的散列值是“21232f297a57a5a743894a0e4a801fc3”,可以到一些md5解密网站很容易的通过散列值得到密码“admin”,即如果直接对密码进行散列相对来说破解更容易,此时我们可以加一些只有系统知道的干扰数据,如用户名和ID(即盐);这样散列的对象是“密码+用户名+ID”,这样生成的散列值相对来说更难破解。

String str = "hello";
String salt = "123";
String md5 = new Md5Hash(str, salt).toString();//还可以转换为 toBase64()/toHex() 

如上代码通过盐“123MD5散列“hello”。另外散列时还可以指定散列次数,如2次表示:md5(md5(str)):“new Md5Hash(str, salt, 2).toString()”。

  

String str = "hello";
String salt = "123";
String sha1 = new Sha256Hash(str, salt).toString(); 

使用SHA256算法生成相应的散列数据,另外还有如SHA1SHA512算法。     

 

Shiro还提供了通用的散列支持:

String str = "hello";
String salt = "123";
//内部使用MessageDigest
String simpleHash = new SimpleHash("SHA-1", str, salt).toString(); 

通过调用SimpleHash时指定散列算法,其内部使用了JavaMessageDigest实现。

 

为了方便使用,Shiro提供了HashService,默认提供了DefaultHashService实现。

DefaultHashService hashService = new DefaultHashService(); //默认算法SHA-512
hashService.setHashAlgorithmName("SHA-512");
hashService.setPrivateSalt(new SimpleByteSource("123")); //私盐,默认无
hashService.setGeneratePublicSalt(true);//是否生成公盐,默认false
hashService.setRandomNumberGenerator(new SecureRandomNumberGenerator());//用于生成公盐。默认就这个
hashService.setHashIterations(1); //生成Hash值的迭代次数

HashRequest request = new HashRequest.Builder()
            .setAlgorithmName("MD5").setSource(ByteSource.Util.bytes("hello"))
            .setSalt(ByteSource.Util.bytes("123")).setIterations(2).build();
String hex = hashService.computeHash(request).toHex(); 

1、首先创建一个DefaultHashService,默认使用SHA-512算法;

2、可以通过hashAlgorithmName属性修改算法;

3、可以通过privateSalt设置一个私盐,其在散列时自动与用户传入的公盐混合产生一个新盐;

4、可以通过generatePublicSalt属性在用户没有传入公盐的情况下是否生成公盐;

5、可以设置randomNumberGenerator用于生成公盐;

6、可以设置hashIterations属性来修改默认加密迭代次数;

7、需要构建一个HashRequest,传入算法、数据、公盐、迭代次数。

 

SecureRandomNumberGenerator用于生成一个随机数:

SecureRandomNumberGenerator randomNumberGenerator =
     new SecureRandomNumberGenerator();
randomNumberGenerator.setSeed("123".getBytes());
String hex = randomNumberGenerator.nextBytes().toHex(); 

 

5.3 加密/解密

Shiro还提供对称式加密/解密算法的支持,如AESBlowfish等;当前还没有提供对非对称加密/解密算法支持,未来版本可能提供。

 

AES算法实现:

AesCipherService aesCipherService = new AesCipherService();
aesCipherService.setKeySize(128); //设置key长度
//生成key
Key key = aesCipherService.generateNewKey();
String text = "hello";
//加密
String encrptText = 
aesCipherService.encrypt(text.getBytes(), key.getEncoded()).toHex();
//解密
String text2 =
 new String(aesCipherService.decrypt(Hex.decode(encrptText), key.getEncoded()).getBytes());

Assert.assertEquals(text, text2); 

更多算法请参考示例com.github.zhangkaitao.shiro.chapter5.hash.CodecAndCryptoTest

 

5.4 PasswordService/CredentialsMatcher

Shiro提供了PasswordServiceCredentialsMatcher用于提供加密密码及验证密码服务。

public interface PasswordService {
    //输入明文密码得到密文密码
    String encryptPassword(Object plaintextPassword) throws IllegalArgumentException;
}
public interface CredentialsMatcher {
    //匹配用户输入的token的凭证(未加密)与系统提供的凭证(已加密)
    boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info);
} 

Shiro默认提供了PasswordService实现DefaultPasswordServiceCredentialsMatcher实现PasswordMatcherHashedCredentialsMatcher(更强大)。

 

DefaultPasswordService配合PasswordMatcher实现简单的密码加密与验证服务

1、定义Realmcom.github.zhangkaitao.shiro.chapter5.hash.realm.MyRealm

public class MyRealm extends AuthorizingRealm {
    private PasswordService passwordService;
    public void setPasswordService(PasswordService passwordService) {
        this.passwordService = passwordService;
    }
     //省略doGetAuthorizationInfo,具体看代码 
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return new SimpleAuthenticationInfo(
                "wu",
                passwordService.encryptPassword("123"),
                getName());
    }
} 

为了方便,直接注入一个passwordService来加密密码,实际使用时需要在Service层使用passwordService加密密码并存到数据库。

 

2ini配置(shiro-passwordservice.ini

[main]
passwordService=org.apache.shiro.authc.credential.DefaultPasswordService
hashService=org.apache.shiro.crypto.hash.DefaultHashService
passwordService.hashService=$hashService
hashFormat=org.apache.shiro.crypto.hash.format.Shiro1CryptFormat
passwordService.hashFormat=$hashFormat
hashFormatFactory=org.apache.shiro.crypto.hash.format.DefaultHashFormatFactory
passwordService.hashFormatFactory=$hashFormatFactory

passwordMatcher=org.apache.shiro.authc.credential.PasswordMatcher
passwordMatcher.passwordService=$passwordService

myRealm=com.github.zhangkaitao.shiro.chapter5.hash.realm.MyRealm
myRealm.passwordService=$passwordService
myRealm.credentialsMatcher=$passwordMatcher
securityManager.realms=$myRealm 

2.1passwordService使用DefaultPasswordService,如果有必要也可以自定义;

2.2hashService定义散列密码使用的HashService,默认使用DefaultHashService(默认SHA-256算法);

2.3hashFormat用于对散列出的值进行格式化,默认使用Shiro1CryptFormat,另外提供了Base64FormatHexFormat,对于有salt的密码请自定义实现ParsableHashFormat然后把salt格式化到散列值中;

2.4hashFormatFactory用于根据散列值得到散列的密码和salt;因为如果使用如SHA算法,那么会生成一个salt,此salt需要保存到散列后的值中以便之后与传入的密码比较时使用;默认使用DefaultHashFormatFactory

2.5passwordMatcher使用PasswordMatcher,其是一个CredentialsMatcher实现;

2.6、将credentialsMatcher赋值给myRealmmyRealm间接继承了AuthenticatingRealm,其在调用getAuthenticationInfo方法获取到AuthenticationInfo信息后,会使用credentialsMatcher来验证凭据是否匹配,如果不匹配将抛出IncorrectCredentialsException异常。

 

3、测试用例请参考com.github.zhangkaitao.shiro.chapter5.hash.PasswordTest

 

另外可以参考配置shiro-jdbc-passwordservice.ini,提供了JdbcRealm的测试用例,测试前请先调用sql/shiro-init-data.sql初始化用户数据。

 

如上方式的缺点是:salt保存在散列值中;没有实现如密码重试次数限制。

 

HashedCredentialsMatcher实现密码验证服务

Shiro提供了CredentialsMatcher的散列实现HashedCredentialsMatcher,和之前的PasswordMatcher不同的是,它只用于密码验证,且可以提供自己的盐,而不是随机生成盐,且生成密码散列值的算法需要自己写,因为能提供自己的盐。

 

1、生成密码散列值

此处我们使用MD5算法,“密码+盐(用户名+随机数)”的方式生成散列值:

String algorithmName = "md5";
String username = "liu";
String password = "123";
String salt1 = username;
String salt2 = new SecureRandomNumberGenerator().nextBytes().toHex();
int hashIterations = 2;

SimpleHash hash = new SimpleHash(algorithmName, password, salt1 + salt2, hashIterations);
String encodedPassword = hash.toHex(); 

如果要写用户模块,需要在新增用户/重置密码时使用如上算法保存密码,将生成的密码及salt2存入数据库(因为我们的散列算法是:md5(md5(密码+username+salt2)))。

 

2、生成Realmcom.github.zhangkaitao.shiro.chapter5.hash.realm.MyRealm2

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    String username = "liu"; //用户名及salt1
    String password = "202cb962ac59075b964b07152d234b70"; //加密后的密码
    String salt2 = "202cb962ac59075b964b07152d234b70";
SimpleAuthenticationInfo ai = 
        new SimpleAuthenticationInfo(username, password, getName());
    ai.setCredentialsSalt(ByteSource.Util.bytes(username+salt2)); //盐是用户名+随机数
        return ai;
} 

此处就是把步骤1中生成的相应数据组装为SimpleAuthenticationInfo,通过SimpleAuthenticationInfocredentialsSalt设置盐,HashedCredentialsMatcher会自动识别这个盐。

 

如果使用JdbcRealm,需要修改获取用户信息(包括盐)的sql:“select password, password_salt from users where username = ?”,而我们的盐是由username+password_salt组成,所以需要通过如下ini配置(shiro-jdbc-hashedCredentialsMatcher.ini)修改:

jdbcRealm.saltStyle=COLUMN
jdbcRealm.authenticationQuery=select password, concat(username,password_salt) from users where username = ?
jdbcRealm.credentialsMatcher=$credentialsMatcher 

1saltStyle表示使用密码+盐的机制,authenticationQuery第一列是密码,第二列是盐;

2、通过authenticationQuery指定密码及盐查询SQL

 

此处还要注意Shiro默认使用了apache commons BeanUtils,默认是不进行Enum类型转型的,此时需要自己注册一个Enum转换器“BeanUtilsBean.getInstance().getConvertUtils().register(new EnumConverter(), JdbcRealm.SaltStyle.class);”具体请参考示例“com.github.zhangkaitao.shiro.chapter5.hash.PasswordTest”中的代码。

 

另外可以参考配置shiro-jdbc-passwordservice.ini,提供了JdbcRealm的测试用例,测试前请先调用sql/shiro-init-data.sql初始化用户数据。

 

3ini配置(shiro-hashedCredentialsMatcher.ini

[main]
credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
credentialsMatcher.hashAlgorithmName=md5
credentialsMatcher.hashIterations=2
credentialsMatcher.storedCredentialsHexEncoded=true
myRealm=com.github.zhangkaitao.shiro.chapter5.hash.realm.MyRealm2
myRealm.credentialsMatcher=$credentialsMatcher
securityManager.realms=$myRealm 

1、通过credentialsMatcher.hashAlgorithmName=md5指定散列算法为md5,需要和生成密码时的一样;

2credentialsMatcher.hashIterations=2,散列迭代次数,需要和生成密码时的意义;

3credentialsMatcher.storedCredentialsHexEncoded=true表示是否存储散列后的密码为16进制,需要和生成密码时的一样,默认是base64

 

此处最需要注意的就是HashedCredentialsMatcher的算法需要和生成密码时的算法一样。另外HashedCredentialsMatcher会自动根据AuthenticationInfo的类型是否是SaltedAuthenticationInfo来获取credentialsSalt盐。

 

4、测试用例请参考com.github.zhangkaitao.shiro.chapter5.hash.PasswordTest

 

密码重试次数限制

如在1个小时内密码最多重试5次,如果尝试次数超过5次就锁定1小时,1小时后可再次重试,如果还是重试失败,可以锁定如1天,以此类推,防止密码被暴力破解。我们通过继承HashedCredentialsMatcher,且使用Ehcache记录重试次数和超时时间。

 

com.github.zhangkaitao.shiro.chapter5.hash.credentials.RetryLimitHashedCredentialsMatcher

public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
       String username = (String)token.getPrincipal();
        //retry count + 1
        Element element = passwordRetryCache.get(username);
        if(element == null) {
            element = new Element(username , new AtomicInteger(0));
            passwordRetryCache.put(element);
        }
        AtomicInteger retryCount = (AtomicInteger)element.getObjectValue();
        if(retryCount.incrementAndGet() > 5) {
            //if retry count > 5 throw
            throw new ExcessiveAttemptsException();
        }

        boolean matches = super.doCredentialsMatch(token, info);
        if(matches) {
            //clear retry count
            passwordRetryCache.remove(username);
        }
        return matches;
} 

如上代码逻辑比较简单,即如果密码输入正确清除cache中的记录;否则cache中的重试次数+1,如果超出5次那么抛出异常表示超出重试次数了。

 

 

示例源代码:https://github.com/zhangkaitao/shiro-example;可加群134755960探讨Spring/Shiro技术。

               

51
7
分享到:
评论
40 楼 lanmingle 2015-02-04  
其实我都很想喷,但是也没有喷下去.
我现在看tao哥的文章,我不认为是教程,只认为这是可以做些什么,有什么效果,毕竟不是专业的.
反正一句话,好过没有,先看着吧,了解各大概.要学的就买书好了.要不是tao哥发这些出来,你们都不知道干什么的,试问?你们敢买书去看,这东西是什么东西都不知道呢.别喷了,我也很想喷...忍~忍~忍~忍~忍~在会在背后偷偷骂人的
39 楼 iSpringSoft 2015-01-05  
iSpringSoft 写道
写的啥啊!!!!!看不懂。。。本人已经工作10年了

关于这个评论我需要澄清一下。
我在看到这篇文章时我是认为非常好的,对楼主的能力我也是非常的佩服,看完文章后,我看到评论都是评得很差,我就和公司的同事说,这篇文章写得这么好,为什么有那么多人踩呢?我说我要发表评论顶楼主,不然楼主太冤了,辛辛苦苦写了一篇文章却还被这样打击。后来我就把链接发给了一个同事看,他看我说这篇文章这么好他就硬要和我反着来,他说他要评论这篇文章很差,结果他真评论了,我以为他用的是他自己的账号。他评完了还笑着让我刷新页面看看评论,看到评论的账号是我的账号真的气得我火冒三丈。我才想起来,前几天他下载文件没有账号,我就用我的账号在他电脑上登了,登录的信息还在他电脑上,他就直接用我的账号来评论。当时也不知道怎么弥补发的这个评论,评论已发,想改也改不,想删也删不,这个黑锅我算是背上了。另外我并没有开发有10年而是三四年。在此以作澄清。
38 楼 yangsong158 2015-01-03  
iSpringSoft 写道
写的啥啊!!!!!看不懂。。。本人已经工作10年了

有点浮躁了。这样的评论,让人看了心理有点堵。
都10年了还看不懂,是哪里看不懂,还是都看不懂,至少能看懂一些吧。
如果一点都看不懂,那我猜测这些年,你的关注点,或许没有在技术上至少不在这个方向上,或者知识好久没有更新了,当个新技术了解下,就罢了。
如果一点都看不懂,你要不要考虑重新选择下,技术是不是真的适合你。

客观说,比起前几篇,我也认为这篇是要难懂一些。
再仔细看看吧,结合作者的源代码,到GIT上去clone一个到本地来,文章结合代码一起看。
社会很浮躁,学习,就要把姿态压低,心放平。有要耐心。
谢谢作者无私的奉献。
提个比较具体的意见吧。
在结合代码阅读本文时,有些代码查找起来不太方便。作者可以把代码片断在哪个JAVA文件中去写一下。

作一个理性的IT做从业者,平和淡定。
匆急燥,出口就让人心理不舒服。
37 楼 iSpringSoft 2014-12-25  
楼主写得非常好,顶!
36 楼 iSpringSoft 2014-12-25  
写的啥啊!!!!!看不懂。。。本人已经工作10年了
35 楼 kjj 2014-09-03  
作者没有义务和必要把以前讲过的知识每次为了照顾哪种弱智再罗嗦一边,对看了文章不求甚解或者没有仔细融汇贯通就想学后面的二货,我只能说,你不适合学习
对你这种寄生虫式的要求,我觉得你完全可以忽视别人的博客,自己能力低下,还大言不惭的嫌别人教的不够仔细,如果是低能儿,请别混淆视听,
34 楼 edison87915 2014-08-31  
wuliaolll 写道
edison87915 写道
wuliaolll 写道
确实,我觉得楼主写的教程顶多只能算是概述,正因为看官方文档看得吃力才来看楼主写的教程,看了一星期了,还没有一个完整的认识.

本人不才,但开发已经8年了.楼主无论是从架构上阐述,还是从代码结构都很混乱。没接触过shiro的人确实很吃力,初级的应用没问题,但高级一点的,比如web集成,spring mvc集成,动态url配置,这些很多配置都没讲清楚,总是概述为前面章节有……作为教程,应该不厌其烦的整体来讲,让读者总是前后翻着看,很累,而且那些配置吧,没有注释,一个spring配置文件一堆的bean,每个property到底起何作用没讲清楚。而且那些自定义的工具类经常莫名其妙的冒出来,让人着实迷糊。

建议楼主每次一章节讲具体实例时,不要嫌烦,从细节上讲清楚配置的要点,代码多一点注释。而且吧,不是每一个人都是从头到尾看的,像我就直入要点,但发现maven配置文件前后章节还有继承,光这点就很不喜,而且建议不要把环境(jetty)相关的配置也带进来。并不是每个人都和楼主的习惯一样。



1.只能算概述
  答:我没见过这么多字的概述,也没见过分门别类、分大纲的概述
2.架构、代码结构 方面的阐述都很混乱
  答:“都”这个字用的不对,不能以偏盖全,有些内容确实看起来有些吃力,比如编码/加密这章,说实话我看起来有点吃力,但要注意,吃力可能是自己的原因,密码学这块不了解的话,看起来肯定吃力些。而且,说实话,我看了作者的文章后,又看了一遍官方文档,觉着二次吸收的内容并不多,也就是说作者能讲的已经讲明白了,而且官方文档关于加密这块的内容还没有作者讲的详细。
3.觉得前后翻着看累,嫌没有注释,嫌讲的不细,嫌环境不兼容
  答:前后翻那是必须的,这么多内容,想一遍吃透,几乎不可能,除非你既非常了解权限框架又比较了解 Shiro。关于代码、注释还有环境问题,我觉着要想好好掌握Shiro,最好根据作者的文章自己用代码实现一遍(用自己的环境、自己的代码、根据自己的理解)。我觉着,文章中的有些代码,初衷并不是让读者拿来即用的,也许就是作者自己的练习而已(猜的)。
并且,作者也有自己的生活、有自己的工作,作者并没有任何义务把每一个细节都扣出来细细讲给大家听,说实话也没有这个时间。当然,这不能作为教程不完美的借口,但我们又有什么资格去要求别人做这做那呢?对于这篇教程,我是报着感恩的心情去看的,所以我也想花时间去认真的评论,每个人对教程提出建议都是个好事,就像协作开发软件一样,软件本身并不完美,每个人都会去寻找它不完美的点,然后提出建议或去改善它。然而我总是看到这么一些人,他们的建议既宽泛又抽象,要求贡献者们去做这做那,对作品的价值通篇否决,建议里全是要求和不满,这样做是不是不太好?
(建议去知乎搜几篇关于“伸手党”的文章,可能有所收获)

最后说说自己的想法,同样是程序员,同样对于一项技术(比如Shiro),有些人快速掌握了、实践了、整理成文并分享了。而另一些人甚至都懒得自己一行一行敲代码、做练习。

就说到这吧,技术方面,我觉得涛-哥是个标杆,评论尽可能客观,并未报着非黑即粉的态度。




你说的是一码事,作为粉不要听不得不好的.我不否认楼主是标杆.也不是不感恩,这两码事.提点意见还用不着你来喷吧.都是搞技术的,交流交流而已.

实事求是的建议而已.正和你说的一样,各人水平不一,可能你的水平高呗.

事实上,能看完作者的教程,还在这里留言,就说明还是对作者肯定的.诚然作者没义务写得很全面,提一提建议也没什么吧?搞it责任心我始终觉得是第一位的,这一点我始终跟我的同事都这样交待,做事就要做好.

再者,从内容上说.试问哪一本比较完善的教程总是出现"这点不必多言"这类的话?你要是针对老手来说,无可厚非,但很显然楼主在这里开博,是想面向更多的受众.

最后,我说的并不是针对加密这一部分章节,只是看到此篇评论多就发表了一下.并且吧,我通过阅读源代码,基本都弄明白了,也很感谢楼主的教程带我入门.劝你不要把自己当别人,别人并不是懒得敲代码,是跟着楼主的代码敲都很乱,每次到了关键时刻,出现此部分和之前相同,不必多言.总是有细节上没交待.


朋友,如果我的话重了,不管你接受不接受,给你道个歉。
我再强调一下,我从不追星,也没有偶像,更不会做没有独立思考能力的脑残粉。

另外附一篇文章和文章中的一个评论,不是针对你,不喜欢的当我没贴出来。
http://zhuanlan.zhihu.com/yeka52/19808503
-----------------------------

知乎有一个问孕妇生宝宝前需要准备什么的问题 一位好心的妈妈把自己的辛苦总结的excel用图片传上来了 完全能看清楚的 然后点开评论 看到有人说:打成一份表格很难么. 那个妈妈没有回复好像也没再回答其他问题 估计是被吓到了。总有这么一些人把别人的分享花费的时间当成理所当然的没有感恩。。。

-----------------------------

这几天关注罗王大战也累了,确实是,有些东西我也无需操心
33 楼 edison87915 2014-08-31  
wuliaolll 写道
edison87915 写道
wuliaolll 写道
确实,我觉得楼主写的教程顶多只能算是概述,正因为看官方文档看得吃力才来看楼主写的教程,看了一星期了,还没有一个完整的认识.

本人不才,但开发已经8年了.楼主无论是从架构上阐述,还是从代码结构都很混乱。没接触过shiro的人确实很吃力,初级的应用没问题,但高级一点的,比如web集成,spring mvc集成,动态url配置,这些很多配置都没讲清楚,总是概述为前面章节有……作为教程,应该不厌其烦的整体来讲,让读者总是前后翻着看,很累,而且那些配置吧,没有注释,一个spring配置文件一堆的bean,每个property到底起何作用没讲清楚。而且那些自定义的工具类经常莫名其妙的冒出来,让人着实迷糊。

建议楼主每次一章节讲具体实例时,不要嫌烦,从细节上讲清楚配置的要点,代码多一点注释。而且吧,不是每一个人都是从头到尾看的,像我就直入要点,但发现maven配置文件前后章节还有继承,光这点就很不喜,而且建议不要把环境(jetty)相关的配置也带进来。并不是每个人都和楼主的习惯一样。



1.只能算概述
  答:我没见过这么多字的概述,也没见过分门别类、分大纲的概述
2.架构、代码结构 方面的阐述都很混乱
  答:“都”这个字用的不对,不能以偏盖全,有些内容确实看起来有些吃力,比如编码/加密这章,说实话我看起来有点吃力,但要注意,吃力可能是自己的原因,密码学这块不了解的话,看起来肯定吃力些。而且,说实话,我看了作者的文章后,又看了一遍官方文档,觉着二次吸收的内容并不多,也就是说作者能讲的已经讲明白了,而且官方文档关于加密这块的内容还没有作者讲的详细。
3.觉得前后翻着看累,嫌没有注释,嫌讲的不细,嫌环境不兼容
  答:前后翻那是必须的,这么多内容,想一遍吃透,几乎不可能,除非你既非常了解权限框架又比较了解 Shiro。关于代码、注释还有环境问题,我觉着要想好好掌握Shiro,最好根据作者的文章自己用代码实现一遍(用自己的环境、自己的代码、根据自己的理解)。我觉着,文章中的有些代码,初衷并不是让读者拿来即用的,也许就是作者自己的练习而已(猜的)。
并且,作者也有自己的生活、有自己的工作,作者并没有任何义务把每一个细节都扣出来细细讲给大家听,说实话也没有这个时间。当然,这不能作为教程不完美的借口,但我们又有什么资格去要求别人做这做那呢?对于这篇教程,我是报着感恩的心情去看的,所以我也想花时间去认真的评论,每个人对教程提出建议都是个好事,就像协作开发软件一样,软件本身并不完美,每个人都会去寻找它不完美的点,然后提出建议或去改善它。然而我总是看到这么一些人,他们的建议既宽泛又抽象,要求贡献者们去做这做那,对作品的价值通篇否决,建议里全是要求和不满,这样做是不是不太好?
(建议去知乎搜几篇关于“伸手党”的文章,可能有所收获)

最后说说自己的想法,同样是程序员,同样对于一项技术(比如Shiro),有些人快速掌握了、实践了、整理成文并分享了。而另一些人甚至都懒得自己一行一行敲代码、做练习。

就说到这吧,技术方面,我觉得涛-哥是个标杆,评论尽可能客观,并未报着非黑即粉的态度。




你说的是一码事,作为粉不要听不得不好的.我不否认楼主是标杆.也不是不感恩,这两码事.提点意见还用不着你来喷吧.都是搞技术的,交流交流而已.

实事求是的建议而已.正和你说的一样,各人水平不一,可能你的水平高呗.

事实上,能看完作者的教程,还在这里留言,就说明还是对作者肯定的.诚然作者没义务写得很全面,提一提建议也没什么吧?搞it责任心我始终觉得是第一位的,这一点我始终跟我的同事都这样交待,做事就要做好.

再者,从内容上说.试问哪一本比较完善的教程总是出现"这点不必多言"这类的话?你要是针对老手来说,无可厚非,但很显然楼主在这里开博,是想面向更多的受众.

最后,我说的并不是针对加密这一部分章节,只是看到此篇评论多就发表了一下.并且吧,我通过阅读源代码,基本都弄明白了,也很感谢楼主的教程带我入门.劝你不要把自己当别人,别人并不是懒得敲代码,是跟着楼主的代码敲都很乱,每次到了关键时刻,出现此部分和之前相同,不必多言.总是有细节上没交待.

wuliaolll 写道
edison87915 写道
wuliaolll 写道
确实,我觉得楼主写的教程顶多只能算是概述,正因为看官方文档看得吃力才来看楼主写的教程,看了一星期了,还没有一个完整的认识.

本人不才,但开发已经8年了.楼主无论是从架构上阐述,还是从代码结构都很混乱。没接触过shiro的人确实很吃力,初级的应用没问题,但高级一点的,比如web集成,spring mvc集成,动态url配置,这些很多配置都没讲清楚,总是概述为前面章节有……作为教程,应该不厌其烦的整体来讲,让读者总是前后翻着看,很累,而且那些配置吧,没有注释,一个spring配置文件一堆的bean,每个property到底起何作用没讲清楚。而且那些自定义的工具类经常莫名其妙的冒出来,让人着实迷糊。

建议楼主每次一章节讲具体实例时,不要嫌烦,从细节上讲清楚配置的要点,代码多一点注释。而且吧,不是每一个人都是从头到尾看的,像我就直入要点,但发现maven配置文件前后章节还有继承,光这点就很不喜,而且建议不要把环境(jetty)相关的配置也带进来。并不是每个人都和楼主的习惯一样。



1.只能算概述
  答:我没见过这么多字的概述,也没见过分门别类、分大纲的概述
2.架构、代码结构 方面的阐述都很混乱
  答:“都”这个字用的不对,不能以偏盖全,有些内容确实看起来有些吃力,比如编码/加密这章,说实话我看起来有点吃力,但要注意,吃力可能是自己的原因,密码学这块不了解的话,看起来肯定吃力些。而且,说实话,我看了作者的文章后,又看了一遍官方文档,觉着二次吸收的内容并不多,也就是说作者能讲的已经讲明白了,而且官方文档关于加密这块的内容还没有作者讲的详细。
3.觉得前后翻着看累,嫌没有注释,嫌讲的不细,嫌环境不兼容
  答:前后翻那是必须的,这么多内容,想一遍吃透,几乎不可能,除非你既非常了解权限框架又比较了解 Shiro。关于代码、注释还有环境问题,我觉着要想好好掌握Shiro,最好根据作者的文章自己用代码实现一遍(用自己的环境、自己的代码、根据自己的理解)。我觉着,文章中的有些代码,初衷并不是让读者拿来即用的,也许就是作者自己的练习而已(猜的)。
并且,作者也有自己的生活、有自己的工作,作者并没有任何义务把每一个细节都扣出来细细讲给大家听,说实话也没有这个时间。当然,这不能作为教程不完美的借口,但我们又有什么资格去要求别人做这做那呢?对于这篇教程,我是报着感恩的心情去看的,所以我也想花时间去认真的评论,每个人对教程提出建议都是个好事,就像协作开发软件一样,软件本身并不完美,每个人都会去寻找它不完美的点,然后提出建议或去改善它。然而我总是看到这么一些人,他们的建议既宽泛又抽象,要求贡献者们去做这做那,对作品的价值通篇否决,建议里全是要求和不满,这样做是不是不太好?
(建议去知乎搜几篇关于“伸手党”的文章,可能有所收获)

最后说说自己的想法,同样是程序员,同样对于一项技术(比如Shiro),有些人快速掌握了、实践了、整理成文并分享了。而另一些人甚至都懒得自己一行一行敲代码、做练习。

就说到这吧,技术方面,我觉得涛-哥是个标杆,评论尽可能客观,并未报着非黑即粉的态度。




你说的是一码事,作为粉不要听不得不好的.我不否认楼主是标杆.也不是不感恩,这两码事.提点意见还用不着你来喷吧.都是搞技术的,交流交流而已.

实事求是的建议而已.正和你说的一样,各人水平不一,可能你的水平高呗.

事实上,能看完作者的教程,还在这里留言,就说明还是对作者肯定的.诚然作者没义务写得很全面,提一提建议也没什么吧?搞it责任心我始终觉得是第一位的,这一点我始终跟我的同事都这样交待,做事就要做好.

再者,从内容上说.试问哪一本比较完善的教程总是出现"这点不必多言"这类的话?你要是针对老手来说,无可厚非,但很显然楼主在这里开博,是想面向更多的受众.

最后,我说的并不是针对加密这一部分章节,只是看到此篇评论多就发表了一下.并且吧,我通过阅读源代码,基本都弄明白了,也很感谢楼主的教程带我入门.劝你不要把自己当别人,别人并不是懒得敲代码,是跟着楼主的代码敲都很乱,每次到了关键时刻,出现此部分和之前相同,不必多言.总是有细节上没交待.


您这意见提的,太有领导范了吧。能少点怨天尤人的态度我也懒得喷。
哥,啥也不说了,源码都看懂了,您能花时间给剖析剖析不,作者没讲好的地方,你来补充,大家都学习学习
32 楼 wuliaolll 2014-08-29  
edison87915 写道
wuliaolll 写道
确实,我觉得楼主写的教程顶多只能算是概述,正因为看官方文档看得吃力才来看楼主写的教程,看了一星期了,还没有一个完整的认识.

本人不才,但开发已经8年了.楼主无论是从架构上阐述,还是从代码结构都很混乱。没接触过shiro的人确实很吃力,初级的应用没问题,但高级一点的,比如web集成,spring mvc集成,动态url配置,这些很多配置都没讲清楚,总是概述为前面章节有……作为教程,应该不厌其烦的整体来讲,让读者总是前后翻着看,很累,而且那些配置吧,没有注释,一个spring配置文件一堆的bean,每个property到底起何作用没讲清楚。而且那些自定义的工具类经常莫名其妙的冒出来,让人着实迷糊。

建议楼主每次一章节讲具体实例时,不要嫌烦,从细节上讲清楚配置的要点,代码多一点注释。而且吧,不是每一个人都是从头到尾看的,像我就直入要点,但发现maven配置文件前后章节还有继承,光这点就很不喜,而且建议不要把环境(jetty)相关的配置也带进来。并不是每个人都和楼主的习惯一样。



1.只能算概述
  答:我没见过这么多字的概述,也没见过分门别类、分大纲的概述
2.架构、代码结构 方面的阐述都很混乱
  答:“都”这个字用的不对,不能以偏盖全,有些内容确实看起来有些吃力,比如编码/加密这章,说实话我看起来有点吃力,但要注意,吃力可能是自己的原因,密码学这块不了解的话,看起来肯定吃力些。而且,说实话,我看了作者的文章后,又看了一遍官方文档,觉着二次吸收的内容并不多,也就是说作者能讲的已经讲明白了,而且官方文档关于加密这块的内容还没有作者讲的详细。
3.觉得前后翻着看累,嫌没有注释,嫌讲的不细,嫌环境不兼容
  答:前后翻那是必须的,这么多内容,想一遍吃透,几乎不可能,除非你既非常了解权限框架又比较了解 Shiro。关于代码、注释还有环境问题,我觉着要想好好掌握Shiro,最好根据作者的文章自己用代码实现一遍(用自己的环境、自己的代码、根据自己的理解)。我觉着,文章中的有些代码,初衷并不是让读者拿来即用的,也许就是作者自己的练习而已(猜的)。
并且,作者也有自己的生活、有自己的工作,作者并没有任何义务把每一个细节都扣出来细细讲给大家听,说实话也没有这个时间。当然,这不能作为教程不完美的借口,但我们又有什么资格去要求别人做这做那呢?对于这篇教程,我是报着感恩的心情去看的,所以我也想花时间去认真的评论,每个人对教程提出建议都是个好事,就像协作开发软件一样,软件本身并不完美,每个人都会去寻找它不完美的点,然后提出建议或去改善它。然而我总是看到这么一些人,他们的建议既宽泛又抽象,要求贡献者们去做这做那,对作品的价值通篇否决,建议里全是要求和不满,这样做是不是不太好?
(建议去知乎搜几篇关于“伸手党”的文章,可能有所收获)

最后说说自己的想法,同样是程序员,同样对于一项技术(比如Shiro),有些人快速掌握了、实践了、整理成文并分享了。而另一些人甚至都懒得自己一行一行敲代码、做练习。

就说到这吧,技术方面,我觉得涛-哥是个标杆,评论尽可能客观,并未报着非黑即粉的态度。




你说的是一码事,作为粉不要听不得不好的.我不否认楼主是标杆.也不是不感恩,这两码事.提点意见还用不着你来喷吧.都是搞技术的,交流交流而已.

实事求是的建议而已.正和你说的一样,各人水平不一,可能你的水平高呗.

事实上,能看完作者的教程,还在这里留言,就说明还是对作者肯定的.诚然作者没义务写得很全面,提一提建议也没什么吧?搞it责任心我始终觉得是第一位的,这一点我始终跟我的同事都这样交待,做事就要做好.

再者,从内容上说.试问哪一本比较完善的教程总是出现"这点不必多言"这类的话?你要是针对老手来说,无可厚非,但很显然楼主在这里开博,是想面向更多的受众.

最后,我说的并不是针对加密这一部分章节,只是看到此篇评论多就发表了一下.并且吧,我通过阅读源代码,基本都弄明白了,也很感谢楼主的教程带我入门.劝你不要把自己当别人,别人并不是懒得敲代码,是跟着楼主的代码敲都很乱,每次到了关键时刻,出现此部分和之前相同,不必多言.总是有细节上没交待.
31 楼 edison87915 2014-08-27  
wuliaolll 写道
确实,我觉得楼主写的教程顶多只能算是概述,正因为看官方文档看得吃力才来看楼主写的教程,看了一星期了,还没有一个完整的认识.

本人不才,但开发已经8年了.楼主无论是从架构上阐述,还是从代码结构都很混乱。没接触过shiro的人确实很吃力,初级的应用没问题,但高级一点的,比如web集成,spring mvc集成,动态url配置,这些很多配置都没讲清楚,总是概述为前面章节有……作为教程,应该不厌其烦的整体来讲,让读者总是前后翻着看,很累,而且那些配置吧,没有注释,一个spring配置文件一堆的bean,每个property到底起何作用没讲清楚。而且那些自定义的工具类经常莫名其妙的冒出来,让人着实迷糊。

建议楼主每次一章节讲具体实例时,不要嫌烦,从细节上讲清楚配置的要点,代码多一点注释。而且吧,不是每一个人都是从头到尾看的,像我就直入要点,但发现maven配置文件前后章节还有继承,光这点就很不喜,而且建议不要把环境(jetty)相关的配置也带进来。并不是每个人都和楼主的习惯一样。



1.只能算概述
  答:我没见过这么多字的概述,也没见过分门别类、分大纲的概述
2.架构、代码结构 方面的阐述都很混乱
  答:“都”这个字用的不对,不能以偏盖全,有些内容确实看起来有些吃力,比如编码/加密这章,说实话我看起来有点吃力,但要注意,吃力可能是自己的原因,密码学这块不了解的话,看起来肯定吃力些。而且,说实话,我看了作者的文章后,又看了一遍官方文档,觉着二次吸收的内容并不多,也就是说作者能讲的已经讲明白了,而且官方文档关于加密这块的内容还没有作者讲的详细。
3.觉得前后翻着看累,嫌没有注释,嫌讲的不细,嫌环境不兼容
  答:前后翻那是必须的,这么多内容,想一遍吃透,几乎不可能,除非你既非常了解权限框架又比较了解 Shiro。关于代码、注释还有环境问题,我觉着要想好好掌握Shiro,最好根据作者的文章自己用代码实现一遍(用自己的环境、自己的代码、根据自己的理解)。我觉着,文章中的有些代码,初衷并不是让读者拿来即用的,也许就是作者自己的练习而已(猜的)。
并且,作者也有自己的生活、有自己的工作,作者并没有任何义务把每一个细节都扣出来细细讲给大家听,说实话也没有这个时间。当然,这不能作为教程不完美的借口,但我们又有什么资格去要求别人做这做那呢?对于这篇教程,我是报着感恩的心情去看的,所以我也想花时间去认真的评论,每个人对教程提出建议都是个好事,就像协作开发软件一样,软件本身并不完美,每个人都会去寻找它不完美的点,然后提出建议或去改善它。然而我总是看到这么一些人,他们的建议既宽泛又抽象,要求贡献者们去做这做那,对作品的价值通篇否决,建议里全是要求和不满,这样做是不是不太好?
(建议去知乎搜几篇关于“伸手党”的文章,可能有所收获)

最后说说自己的想法,同样是程序员,同样对于一项技术(比如Shiro),有些人快速掌握了、实践了、整理成文并分享了。而另一些人甚至都懒得自己一行一行敲代码、做练习。

就说到这吧,技术方面,我觉得涛-哥是个标杆,评论尽可能客观,并未报着非黑即粉的态度。

30 楼 wuliaolll 2014-08-26  
确实,我觉得楼主写的教程顶多只能算是概述,正因为看官方文档看得吃力才来看楼主写的教程,看了一星期了,还没有一个完整的认识.

本人不才,但开发已经8年了.楼主无论是从架构上阐述,还是从代码结构都很混乱。没接触过shiro的人确实很吃力,初级的应用没问题,但高级一点的,比如web集成,spring mvc集成,动态url配置,这些很多配置都没讲清楚,总是概述为前面章节有……作为教程,应该不厌其烦的整体来讲,让读者总是前后翻着看,很累,而且那些配置吧,没有注释,一个spring配置文件一堆的bean,每个property到底起何作用没讲清楚。而且那些自定义的工具类经常莫名其妙的冒出来,让人着实迷糊。

建议楼主每次一章节讲具体实例时,不要嫌烦,从细节上讲清楚配置的要点,代码多一点注释。而且吧,不是每一个人都是从头到尾看的,像我就直入要点,但发现maven配置文件前后章节还有继承,光这点就很不喜,而且建议不要把环境(jetty)相关的配置也带进来。并不是每个人都和楼主的习惯一样。
29 楼 zcgewu 2014-08-19  
hoarhoar 写道
edison87915 写道
hoarhoar 写道
iwindyforest 写道
jinnianshilongnian 写道
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

谢谢批评,你可以直接跳过文章,直接参考源代码:https://github.com/zhangkaitao/shiro-example/tree/master/shiro-example-chapter5

To usmeet:
我觉得开涛的文章挺好的呀, 其实学习shiro的时候, 开涛的博客和Shiro的官方文档我都看, 但感觉Shiro的官方文档也不好呀, 很多地方介绍的非常不详细, 但都可以从代码里面得到更好的理解.
你觉得文章不好可以直接看代码, 觉得代码不好可以选择不看, 没有必要这样吧?


编程需要较高智商这还有疑问?你作为大学老师就更应该能体会到吧?跟我比学历和智商?我没你那么自信,但绝对不低,我既给大学生上课,也给大学老师上课,你们最近群众路线研究的怎么样了?大多数大学老师的技术水平都是什么样的你也知道。开涛写的很好,伸手党还要求给你嚼碎了喂饱你,真是无语了。大学里就是因为有你这样的老师,而且比率还不低,才教出很多毕业就失业的学生。我给大学老师上课时的感觉就是:你们这么多年怎么就不好好学点技术呢?

to:usmeet
你要明白一个基本事实:高智商的人是不屑从事码农这项工作的

说这句话的时候经过大脑了么,如果没有全世界的高智商的人构建起互联网,如果没有高智商的、有创造精神的人编写一个个交流平台,你坐在电脑前敲敲键盘就能随意批评全国各地的人?你说这句话也能看出来,你根本就不喜欢编程,那种用一行行代码创造新事物的兴奋你永远都不会感受到,你喜欢的是网上搜集些教学材料,最好是稍加改造就能作为你的教学ppt。其实我不担心你,被大学老师坑的人数不清,都习惯了,我担心的是你的那批学生,在你的教导下,他们的未来会怎样,斩钉截铁的说智商高的人不会从事某个行业或事业,这个责任你付不起。

另外,提意见绝对是种贡献,但不能不尊重别人的劳动,尤其你还为人师表。

回到你的困惑上,这个教程是给有java基础和懂得自学、实践的人看的,官方文档的内容覆盖面也不全。没人能给你个万能-钥匙,见门就能开,你自己得使把劲,没这个智商或钻研精神,就不要做老师。

我还想给你及某些老师提个意见,以后制作ppt的时候,请把参考文献和出处标示一下,让学生们离原创知识的发源地近一些

哥们说的太对了,真是我把我心里的话都说了,这种人多了去了,我们真正热爱这行的人普遍对他们很鄙视,一群混饭吃的家伙,照本宣科的家伙,一群坑害学生的家伙。

那个大学老师,你有时间也写一篇shiro的博文,让大家看看您高超的教学水平。
28 楼 ynyee 2014-08-18  
tao哥,问个问题。

就是我service层在创建用户的时候想使用与验证时相同的算法,使用了spring,不知道这个怎么将编码解码的组件用在登录和创建用户两个地方,但使用同一套东西。

27 楼 agen10120216 2014-07-28  
我也来凑个热闹吧。

之前有那位在大学教书的朋友讲作者ABCD的问题,其实这是在学校和企业的差别。
我们看一些文档或者是书籍时,经常会发现一个有趣的现象,学校里的人,写的东西都特别的详细,把每个概念都会给解释一遍,这种看起来不错,其实是一种严重的浪费。

要知道,不管讲解任何概念,都会有一个起点的问题,也就是会对读者有一个基本要求,这是一个需要权衡的问题。讲的太详细,其实大家看不到重点,铺天盖地的一堆铺垫和解释之后,重点和精华就淹没其中了;如果讲的太精炼,又确实会存在一个过程不连贯,似乎都是一个个孤立的知识点的问题。
26 楼 hoarhoar 2014-07-27  
edison87915 写道
hoarhoar 写道
iwindyforest 写道
jinnianshilongnian 写道
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

谢谢批评,你可以直接跳过文章,直接参考源代码:https://github.com/zhangkaitao/shiro-example/tree/master/shiro-example-chapter5

To usmeet:
我觉得开涛的文章挺好的呀, 其实学习shiro的时候, 开涛的博客和Shiro的官方文档我都看, 但感觉Shiro的官方文档也不好呀, 很多地方介绍的非常不详细, 但都可以从代码里面得到更好的理解.
你觉得文章不好可以直接看代码, 觉得代码不好可以选择不看, 没有必要这样吧?


编程需要较高智商这还有疑问?你作为大学老师就更应该能体会到吧?跟我比学历和智商?我没你那么自信,但绝对不低,我既给大学生上课,也给大学老师上课,你们最近群众路线研究的怎么样了?大多数大学老师的技术水平都是什么样的你也知道。开涛写的很好,伸手党还要求给你嚼碎了喂饱你,真是无语了。大学里就是因为有你这样的老师,而且比率还不低,才教出很多毕业就失业的学生。我给大学老师上课时的感觉就是:你们这么多年怎么就不好好学点技术呢?

to:usmeet
你要明白一个基本事实:高智商的人是不屑从事码农这项工作的

说这句话的时候经过大脑了么,如果没有全世界的高智商的人构建起互联网,如果没有高智商的、有创造精神的人编写一个个交流平台,你坐在电脑前敲敲键盘就能随意批评全国各地的人?你说这句话也能看出来,你根本就不喜欢编程,那种用一行行代码创造新事物的兴奋你永远都不会感受到,你喜欢的是网上搜集些教学材料,最好是稍加改造就能作为你的教学ppt。其实我不担心你,被大学老师坑的人数不清,都习惯了,我担心的是你的那批学生,在你的教导下,他们的未来会怎样,斩钉截铁的说智商高的人不会从事某个行业或事业,这个责任你付不起。

另外,提意见绝对是种贡献,但不能不尊重别人的劳动,尤其你还为人师表。

回到你的困惑上,这个教程是给有java基础和懂得自学、实践的人看的,官方文档的内容覆盖面也不全。没人能给你个万能-钥匙,见门就能开,你自己得使把劲,没这个智商或钻研精神,就不要做老师。

我还想给你及某些老师提个意见,以后制作ppt的时候,请把参考文献和出处标示一下,让学生们离原创知识的发源地近一些

哥们说的太对了,真是我把我心里的话都说了,这种人多了去了,我们真正热爱这行的人普遍对他们很鄙视,一群混饭吃的家伙,照本宣科的家伙,一群坑害学生的家伙。
25 楼 kjj 2014-07-26  
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

看着这个回复,我刚看完楼主写的文章,进一步说,楼主写的文章我看过很多了,受益匪浅
对你的回复我简直无语了,
中国就是你这种不求甚解,张口要饭吃,就想拿别人劳动成果的人太多了,才导致整体素质低下
你还是大学老师,唉,
我就对你一句话比较感兴趣,你斩钉截铁的说编程不是高智商人的工作,那你认为世界上顶尖黑客都是弱智了,你还举abcd顺序的例子来比喻,笑死人了,难道世界上的逻辑都是abcd一条线,没有拐个弯了,真为你悲哀!
24 楼 edison87915 2014-07-26  
hoarhoar 写道
iwindyforest 写道
jinnianshilongnian 写道
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

谢谢批评,你可以直接跳过文章,直接参考源代码:https://github.com/zhangkaitao/shiro-example/tree/master/shiro-example-chapter5

To usmeet:
我觉得开涛的文章挺好的呀, 其实学习shiro的时候, 开涛的博客和Shiro的官方文档我都看, 但感觉Shiro的官方文档也不好呀, 很多地方介绍的非常不详细, 但都可以从代码里面得到更好的理解.
你觉得文章不好可以直接看代码, 觉得代码不好可以选择不看, 没有必要这样吧?


编程需要较高智商这还有疑问?你作为大学老师就更应该能体会到吧?跟我比学历和智商?我没你那么自信,但绝对不低,我既给大学生上课,也给大学老师上课,你们最近群众路线研究的怎么样了?大多数大学老师的技术水平都是什么样的你也知道。开涛写的很好,伸手党还要求给你嚼碎了喂饱你,真是无语了。大学里就是因为有你这样的老师,而且比率还不低,才教出很多毕业就失业的学生。我给大学老师上课时的感觉就是:你们这么多年怎么就不好好学点技术呢?

to:usmeet
你要明白一个基本事实:高智商的人是不屑从事码农这项工作的

说这句话的时候经过大脑了么,如果没有全世界的高智商的人构建起互联网,如果没有高智商的、有创造精神的人编写一个个交流平台,你坐在电脑前敲敲键盘就能随意批评全国各地的人?你说这句话也能看出来,你根本就不喜欢编程,那种用一行行代码创造新事物的兴奋你永远都不会感受到,你喜欢的是网上搜集些教学材料,最好是稍加改造就能作为你的教学ppt。其实我不担心你,被大学老师坑的人数不清,都习惯了,我担心的是你的那批学生,在你的教导下,他们的未来会怎样,斩钉截铁的说智商高的人不会从事某个行业或事业,这个责任你付不起。

另外,提意见绝对是种贡献,但不能不尊重别人的劳动,尤其你还为人师表。

回到你的困惑上,这个教程是给有java基础和懂得自学、实践的人看的,官方文档的内容覆盖面也不全。没人能给你个万能-钥匙,见门就能开,你自己得使把劲,没这个智商或钻研精神,就不要做老师。

我还想给你及某些老师提个意见,以后制作ppt的时候,请把参考文献和出处标示一下,让学生们离原创知识的发源地近一些
23 楼 hoarhoar 2014-07-16  
iwindyforest 写道
jinnianshilongnian 写道
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

谢谢批评,你可以直接跳过文章,直接参考源代码:https://github.com/zhangkaitao/shiro-example/tree/master/shiro-example-chapter5

To usmeet:
我觉得开涛的文章挺好的呀, 其实学习shiro的时候, 开涛的博客和Shiro的官方文档我都看, 但感觉Shiro的官方文档也不好呀, 很多地方介绍的非常不详细, 但都可以从代码里面得到更好的理解.
你觉得文章不好可以直接看代码, 觉得代码不好可以选择不看, 没有必要这样吧?


编程需要较高智商这还有疑问?你作为大学老师就更应该能体会到吧?跟我比学历和智商?我没你那么自信,但绝对不低,我既给大学生上课,也给大学老师上课,你们最近群众路线研究的怎么样了?大多数大学老师的技术水平都是什么样的你也知道。开涛写的很好,伸手党还要求给你嚼碎了喂饱你,真是无语了。大学里就是因为有你这样的老师,而且比率还不低,才教出很多毕业就失业的学生。我给大学老师上课时的感觉就是:你们这么多年怎么就不好好学点技术呢?
22 楼 iwindyforest 2014-07-04  
jinnianshilongnian 写道
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

谢谢批评,你可以直接跳过文章,直接参考源代码:https://github.com/zhangkaitao/shiro-example/tree/master/shiro-example-chapter5

To usmeet:
我觉得开涛的文章挺好的呀, 其实学习shiro的时候, 开涛的博客和Shiro的官方文档我都看, 但感觉Shiro的官方文档也不好呀, 很多地方介绍的非常不详细, 但都可以从代码里面得到更好的理解.
你觉得文章不好可以直接看代码, 觉得代码不好可以选择不看, 没有必要这样吧?

21 楼 iwindyforest 2014-07-04  
jinnianshilongnian 写道
usmeet 写道
hoarhoar 写道
jinnianshilongnian 写道
usmeet 写道
看作者的文章 基本看不懂 。不否认作者的编程水平,但是教程写的确实烂,毫无讲解功力,根本不适合初学者。

谢谢批评,如果看不懂,可以参考官方文档和javadoc。

这么回复很好,我曾经教蠢猪怎么操作电脑,蠢猪给我一顿臭骂,说我不会说人话,人类智商差别是巨大的,编程是高智商人的游戏,没必要照顾智商极低的劣等生物。

编程是高智商人的游戏?恶心死了。凭你这句话,基本可以断定你学历和智商都比较低。你要明白一个基本事实:高智商的人是不屑从事码农这项工作的。楼主的文章,客观的说,比官方文档和javadoc肯定要好理解一些。但是作为教程,基本不适合初学者看,因为讲的东西缺乏逻辑性。简单说,讲清楚一件事情,假设要遵循A- B-C -D 这个顺序或者逻辑的话,楼主教程的做法是直接 A - D。你要知道,并不是每个人都看过并了解B和C这个中间过程的。这个不是智商不智商的事情,是有没有看过的事情。附带说一句,我是一名大学教师,我之所以说看不懂,是以学生的接受程度来看待楼主的文章。客观的说,楼主的文章适合已经熟悉shiro的人再过来参考参考。或者,可以改个名字,叫shiro概要。作为教程不合格。

谢谢批评,你可以直接跳过文章,直接参考源代码:https://github.com/zhangkaitao/shiro-example/tree/master/shiro-example-chapter5

To usmeet:

相关推荐

Global site tag (gtag.js) - Google Analytics