学习JPress

最近在学习jboot项目,那最好的学习资料就是其官方基于jboot写的jpress。由于jpress有些代码注释不足,我就边学习,边把注释记录上,同时补充一下java的知识(我常年开发基于C#的cs客户端)ps.不知道分享这样的内容会不会有些不妥,如有不妥,詹总说一下,我删帖。

1、io.jpress.commons.utils.CommonsUtils :


/**
 * @author Michael Yang 杨福海 (fuhai999@gmail.com)
 * @version V1.0
 * @Package io.jpress.commons.utils
 */
public class CommonsUtils {

    /**
     * 生成1000以上的随机码
     * @return
     */
    public static String generateCode() {
        Random random = new Random();
        return String.valueOf(random.nextInt(9999 - 1000 + 1) + 1000);
    }

    /**
     * 安静的关闭 参数:实现了自动关闭资源接口的类
     * java类型bai后面跟三个点是代表可du以接受多个实际参数zhi,这里的多个指的是dao不限个数,可以zhuan是一个、两个、三个甚至更多。
     * java中类型后面加三个点是java1.5之后出现的新的内容,使用在函数的形参上,相当于一个数组,调用函数时传递多少了实际参数,都可以存储到这个形参上,需要注意的是,使用这个形参必须放在最后一位形参位置上,否则会报错!
     * @param autoCloseables
     */
    public static void quietlyClose(AutoCloseable... autoCloseables) {
        for (AutoCloseable closeable : autoCloseables) {
            if (closeable != null) {
                try {
                    closeable.close();
                } catch (Exception e) {
                    // do nothing
                }
            }
        }
    }


    /**
     * 最大文本长度
     * @param content
     * @param maxLength
     * @return
     */
    public static String maxLength(String content, int maxLength) {
        return CommonsUtils.maxLength(content, maxLength, null);
    }


    /**
     * 取文本最大长度
     * 若文本长度小于@maxLength,则直接返回文本。否则截取长度为@maxLength的文本并追加@suffix(if not null or blank)
     * @param content 文本内容
     * @param maxLength 最大长度
     * @param suffix 后缀
     * @return 文本
     */
    public static String maxLength(String content, int maxLength, String suffix) {
        if (StrUtil.isBlank(content)) {
            return content;
        }

        if (maxLength <= 0) {
            throw new IllegalArgumentException("maxLength 必须大于 0 ");
        }

        if (StrUtil.isNotBlank(suffix)) {
            return content.length() <= maxLength
                    ? content :
                    content.substring(0, maxLength) + suffix;

        } else {
            return content.length() <= maxLength
                    ? content :
                    content.substring(0, maxLength);

        }
    }

    /**
     * 移除后缀
     * @param url 链接
     * @return 移除后缀的链接
     */
    public static String removeSuffix(String url) {

        int indexOf = url.indexOf(".");

        if (indexOf == -1) {
            return url;
        }

        return url.substring(0, indexOf);
    }

    /**
     * 防止 model 存储关于 xss 相关代码
     * @param model activerecord类
     * @param ignoreAttrs 需要忽略的属性
     */
    public static void escapeModel(Model model, String... ignoreAttrs) {
        String[] attrNames = model._getAttrNames();
        for (String attr : attrNames) {

            if (ArrayUtils.contains(ignoreAttrs, attr)) {
                continue;
            }

            Object value = model.get(attr);

            if (value != null && value instanceof String) {
                // 通过StrUtil的escapeHtml转义可能的html代码(将< > & " '转成字符实体)
                model.set(attr, StrUtil.escapeHtml(value.toString()));
            }
        }
    }

    /**
     * 防止 Map 存储关于 xss 相关代码
     * @param map Map类
     * @param ignoreKeys 需要忽略的键
     */
    public static void escapeMap(Map map, Object... ignoreKeys) {
        if (map == null || map.isEmpty()) {
            return;
        }

        Set keys = map.keySet();
        for (Object key : keys) {
            if (ArrayUtils.contains(ignoreKeys, key)) {
                continue;
            }

            Object value = map.get(key);

            if (value != null && value instanceof String) {
                map.put(key, StrUtil.escapeHtml(value.toString()));
            }
        }
    }

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(generateCode());
    }
}


2、jpress的权限设计 

  • 数据表:

tables.pngtables.png

评论区

JFinal

2021-03-06 16:52

jpress 是 jfinal 生态内的项目,当然可以分享,这里是 jfinal 垂直社区

此外,你的内容在复制的时候,要先点击一下那个贴源码的下拉,否则你现在的内容全是乱掉的

zasray

2021-03-06 17:03

@JFinal 老大,贴源码的下拉是哪里?我在帖子中想上传一张200k的png图片也不行。。。 现在比较喜欢md。。。

JFinal

2021-03-06 17:34

@zasray 进入这里:
https://jfinal.com/my/share/add

第二个按钮即是

zasray

2021-03-06 20:55

@JFinal 好的,已修正。谢谢

JFinal

2021-03-06 21:11

@zasray 好看多了,感谢分享

热门分享

扫码入社