Giter VIP home page Giter VIP logo

pybbs's People

Contributors

atjiu avatar beldon avatar clefzz avatar gitter-badger avatar li-sui avatar teddy-zhu avatar vileneera avatar yeszao avatar yqmmm avatar zhangyd-c avatar zhoujw8792 avatar zzzzbw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pybbs's Issues

建议,吧 config.yml 合并到 application.yml

spring boot 的哲学本身就是简化配置,统一配置,你把网站的配置独立出来没有啥特别的好处。
部署的时候,除了网站信息外,也要修改jdbc,导致同时要改两个文件。

application.yml 里面也不是只有spring节点,也有 log 这样作为根节点的,你添加一个自定义的 site 节点,感觉没啥问题

求大神给社区做一个Dockerfile

我还在给社区完善功能,有空了会学一下docker来弄一下,在这之前先发一下吧,有会的就麻烦给做个Dockerfile,先谢谢了!

我已经在docker cloud上关联了pybbs,github上有代码提交docker cloud 就会编译,但没有Dockerfile,一直都是失败 😂

开发中碰到的问题求助大家

在用springboot开发的时候碰到了不少问题,能解决的,我自己就解决了,还没解决的,来求助一下大家

问题一

springboot 使用springcloud 做第三方登录的解决方案,网上也找了很多例子,springboot官方也有很多例子,但都没有跟本地用户结合的登录例子(也可能是我没找到),所以在这求助大大们,有做过的springboot里用springsecurity管理权限并且实现了github/qq/weibo等联合登录的例子,求分享一下!

问题二

在pybbs里用的是springsecurity管理的权限,默认是开启了csrf的,网页上get,post提交都没有问题,因为可以在模板里拿到spring生成的csrf数据,但pybbs也提供了接口,接口里get请求没有csrf的问题,但post就有csrf的问题了,如果使用http.csrf().disabled() 是可以解决的,可我不想这么做,求碰到并解决了这样问题的大大给分享一下!

问题三

springboot里集成的solr/es等给我的感觉是用做了nosql数据库了(也就是跟用mysql,oracle一样),我没找到可以做检索的方法,也可能是我没弄明白,求大大们分享一下自己的经验

暂时碰到了这些问题,后面再有,再加,先谢谢了!!

BBS启动后,后台一直报警告log

BBS启动后,后台不停地报警告log,请问什么原因:

log1:
警告: The web application [bbs] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
十月 10, 2016 4:51:04 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc
警告: The web application [bbs] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
十月 10, 2016 4:51:04 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: The web application [bbs] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)

log2:
[WARN]-[Thread: ContainerBackgroundProcessor[StandardEngine[Catalina]]]-[com.jfinal.plugin.ehcache.CacheKit.getOrAddCache()]: Could not find cache config [sysconfigcache], using default.

级联删除的问题

首先应该赞扬您这种开源奉献的精神。
我看到代码中有这样的使用示例

deleteTopic(int topicId){
deleteReplyByTopicId(topicId);
deleteTopicById(topicId);
}

我觉得,如果要用hibernate,就应该用上级联删除相关的功能,因为只需要在entity中指定对应的级联关系即可。
如上这段代码,就忘了级联删除对应的collect,如果某个topic被收藏了,那么删除topic的时候肯定会报出外键关联异常。
或者说,整个项目就不要设置各个entity之间的关联关系,不使用数据库外键。

部署问题

我在tomcat上部署pybbs,启动tomcat并访问,出现”啊哦,服务器出错了~~“这样的错误,是怎么回事啊?

关于分页

首先,我觉得现在的分页实现的有些低效,尤其是帖子很多的情况。而且有limit,一定会在有并发修改的时候乱掉,比如取第二页之前有人发了新帖子。
第二,我觉得可以不用分页,做成,一次获取N条的类似Twitter的那种。对应sql是
where id> startid and id<=endid

包结构划分方式的讨论

只是一个讨论,因为这个问题本身存在争议。

现有的包结构是安装功能模块划分的:

module
  collect
  index
  notification
  reply
  topic 
  user

每个模块通常包含四个包:

controller
dao
entity
service

目前这么分包存在的问题:
1.包结构特别多,但是很多包其实只有一个类,比如:module.user.service.UserService.java 只有这一个类
2.命名冗余,例如 module.user.service.UserService.java ,他本身就存在于 Module.user 包,那么 UserService 前面的User是不是冗余的?
3.依赖结构应该是内聚的,例如 UserService 应该是一个用户相关的业务类,但是其实跟用户相关的模块,例如 topic,notification都会用到,这些跟user模块是平行关系,但是却是互相依赖。所以UserService是不是应该是高于module的结构?
4.有一些类没地方放,例如 BaseController,BaseEntity被放到了common包里,Result其实应该属于entity(尽管他不是一个domain),现在只能放到 util 里面的。
5.无法纵向分层。举个例子,很多网站是这样部署的:
bbs.tomoya.com -> 网站端
api.tomoya.com -> Api端
这两个跑在独立的端口,是两套程序,这样的结构很常见。
假如我现在有了这样的需求,想要对pybbs做改造,可能的改造思路是:
把现有的项目拆分成三个子项目,分别是:
core -> 包含 entity,dao,service
web -> 依赖于core,包含 webController,webService,是个可执行程序
api -> 依赖于core,包含 ApiController, apiService,是个可执行程序
未来可能构造一个聊天室 chat.tomoya.com -> 依赖于 core 核心业务区扩展就行了
现有的分包模式很难做这样的改造,因为无法提取core

----------- 分割 --------------

结构应该是自顶向下的:
Controller
依赖于
Service
依赖于
Domain

对于底部的是依赖关系,而对于顶部的则完全不可知

----------- 分割 --------------

按照上面的理由,更合理的一种方式可能是安层分或者按照类功能分:

config
controller
   web
      IndexController.java
   api
      UserApiController.java
service
domain
   entity
   dao
util

我最早也是按照module分包,经过实践目前倾向于按照层分包。
当然这个问题本身也存在争议,社区也有广泛的讨论。

这个issues只是一个讨论,不一定是一个建议。目的是希望可以找到一个最佳实践。

pdf support

package example;

import java.io.IOException;

import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class Step1 {

public static void main(String[] args) throws IOException, COSVisitorException
{

// if( args.length != 2 )
// {
// System.err.println("usage: " + Step1.class.getName() + " ");
// System.exit(1);
// }

    String filename = "/tmp/pdf01.pdf";
    String message = "hello, world";
    
    
 // Create a document and add a page to it
    PDDocument document = new PDDocument();
    PDPage page = new PDPage();
    document.addPage( page );

    // Create a new font object selecting one of the PDF base fonts
    PDFont font = PDType1Font.HELVETICA_BOLD;

    

    
        
    PDDocumentInformation info = new PDDocumentInformation();
    info.setAuthor("Registered to: IBM-MANU");
    info.setCreator("HP Exstream Version 7.0.616 32-bit");
    info.setTitle("EOB");
    
    
    
    document.setDocumentInformation(info );
    
    // Start a new content stream which will "hold" the to be created content
    PDPageContentStream contentStream = new PDPageContentStream(document, page);

    
    
    // Define a text content stream using the selected font, moving the cursor and drawing the text "Hello World"
    contentStream.beginText();
    contentStream.setFont( font, 12 );
    contentStream.moveTextPositionByAmount( 100, 700 );
    contentStream.drawString( "Hello World" );
    contentStream.endText();

    // Make sure that the content stream is closed:
    contentStream.close();

    // Save the results and ensure that the document is properly closed:
    document.save( "/tmp/hello.pdf");
    document.close();
    
     
    }
}

=================
step2
package example;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

import org.apache.pdfbox.pdmodel.PDPageContentStream;

import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class Step2 {

public static void main(String[] args) throws IOException {
	// TODO Auto-generated method stub
	  String filename = "/tmp/pdf01.pdf";
        String message = "hello, world";
        
        try (PDDocument doc = new PDDocument())
        {
            PDPage page = new PDPage();
            doc.addPage(page);
            
            PDFont font = PDType1Font.HELVETICA_BOLD;

            try (PDPageContentStream contents = new PDPageContentStream(doc, page))
            {
                contents.beginText();
                contents.setFont(font, 12);
                contents.newLineAtOffset(100, 700);
                contents.showText(message);
                contents.endText();
            }
            
            doc.save(filename);
        }
        
        
}

}

可否考虑移除对 tomoya92/java-utils 的依赖

https://github.com/tomoya92/java-utils

1.这个包你没有发布到中心厂库中
2.个人对这个库的一些实现持有保留意见
3.这个库是一个通用类工具库,而实际上项目中只用到一小部分工具
4.项目中用到的部分有更好的代替品
5.其他部分,作为项目级别的工具类似乎更合适

针对4,5详细说明:

com.github.javautils.string.StringUtil.java

这个工具类,字符串相关的方法(isBlank,notBlank),跟 org.apache.commons.lang3.StringUtils 的实现是基本相同的
其他部分:
StringUtil.randomString(); // 产生一个随机字符串,这个应该是一个业务级别的逻辑,放在通用工具里面感觉不合理,应该放到项目基本的工具类中

StringUtil.fetchUsers(); // 查找@用户,同上

StringUtil.getUUID(): 这个函数的实现是这样的:

return UUID.randomUUID().toString().replaceAll("-", "");

UUID的标准格式中是有横线的,你去掉横线使用,跟上面的理由相同,这也是一个业务级别的逻辑
而且这里,你是作为文件名,我个人认为有横线没啥不妥的

com.github.javautils.encrypt.EncryptionUtil.java

这个命名存在问题,这里实现的实际上是编码,而不是加密
这里只用到了一个md5,可以被 Apache Commons Codec 代替

com.github.javautils.net.IpUtil.java

只有一个方法是:getIpAddr(),根据 HttpServletRequest 取客户端ip地址,项目中用了记录日志
感觉应该作为项目级别的工具类

com.github.javautils.web.CookieUtils.java

虽然import了这个类,但是其实根本没使用
另外这里Utils,而其他是Util,强迫症根本受不了啊

表缺失

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'demo.pybbs_base_model' doesn't exist

BaseEntity.fetchUsers会报一个异常

    public static List<String> fetchUsers(String str) {
        List<String> ats = new ArrayList<>();
        String pattern = "@";
        Pattern regex = Pattern.compile(pattern);
        Matcher regexMatcher = regex.matcher(str);
        while (regexMatcher.find()) {
            ats.add(regexMatcher.group(1));
        }
        return ats;
    }

我测试了一下,这里会报一个No group 1的异常

String test = "@dd 1 @dd 2"
BaseEntity.fetchUsers(test);

登录偶尔会出现 403

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Dec 29 18:02:41 CST 2016
There was an unexpected error (type=Forbidden, status=403).
Invalid CSRF Token '48dcca5a-1458-42f0-94e3-5cd6cb398fea' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

如何把application.yml放到打包好的jar包外面配置??

我用maven打包了工程得到jar包,但我想直接修改jar包里的配置文件,配置域名等等,所以就解压了jar包配置完了然后再压缩,但发现jar包损坏没法运行了,所以想把配置文件放到jar包外面,请问大神这个该如何解决?

配置好启动报错。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]

上传图片问题

我使用markdown编辑器,上传图片成功后,访问图片是404,必须要重新再部署一遍,才能显示图片

spring boot 2.4版

可否考虑移除 lombok ?

这个东西虽然可以自动生成 getter 跟 setter,但是 编辑器啥的右键可以快速生成,没有感觉特别方便。bean如果不经常变动,getter跟setter也不需要经常动。

另外,这个东西依赖于编辑器,如果是自动化构建就会有问题

目录分隔符替换报错

ClassSearcher.java 下
private static List findFiles(String baseDirName, String targetFileName)()方法
fileName.substring(start + open.length(), end).replaceAll(File.separator, ".");

报java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \错

关于日志

代码里面有些 e.printStackTrace();
建议改成log。

一个交流

失业中,打算做个完整的符合自己业务的BBS,请问作者可否提供一些技术支持。

新版本的图像上传路径配置是不是有问题?

比如说上传头像的操作
如果用main函数启动,那么上传的头像在工程的根目录下;
如果加载在Tomcat下启动,那么上传的头像在tomcat/bin文件夹内;
不管怎样前台都无法加载到这张图片。怀疑是配置了相对路径?

咱做的东西能不能用点心

咱做的东西能不能用点心,有bug不要紧,咱可以完善,起码系统能启动啊,别人用你的东西,从数据库到工程全都得调一遍,不然全是错。你做的东西,分享出来,大家用的同时帮你完善,如果不能用那不就白费了吗?

pybbs访问每个页面都自动访问/error, 这样目的是什么? 还是bug?

问题来自 @javaLover1984

我用的是2.4版本
pybbs访问每个页面都自动访问/error, 这样目的是什么? 还是bug? 如下图日志:

untitled1.png

访问话题详情, 自动访问/error
再如, 下图, 访问首页会自动访问/error

untitled2.png
另外, 朋也社区很流畅, 安卓客户端尤其快, 服务器用的应该是阿里云, 能不能把服务器的一些参数列出来给朋友们一个参考, 比如系统,cpu,内存,带宽等等

感谢开源这么好的产品

导入 pybbs.sql 出错

我命令行导入 pybbs.sql 出错了。。
mysql> source /home/develop/learn/pybbs/pybbs.sql
ERROR 1366 (HY000): Incorrect string value: '\xE4\xBB\xAA\xE8\xA1\xA8...' for column 'description' at row 1
ERROR 1366 (HY000): Incorrect string value: '\xE8\xB6\x85\xE7\xBA\xA7...' for column 'description' at row 1
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (pybbs.pybbs_role_permission, CONSTRAINT FKksb0b8rm0k0b89trps3dd0doj FOREIGN KEY (role_id) REFERENCES pybbs_role (id))
ERROR 1366 (HY000): Incorrect string value: '\xE5\x88\x86\xE4\xBA\xAB' for column 'name' at row 1
ERROR 1048 (23000): Column 'block' cannot be null
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (pybbs.pybbs_user_role, CONSTRAINT FKd8byynux0fguwt59me1kc9fbj FOREIGN KEY (role_id) REFERENCES pybbs_role (id))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.