├── .gitignore ├── README.md ├── admin ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── university │ │ └── alumni │ │ └── admin │ │ ├── config │ │ └── HibernateConfiguration.java │ │ └── web │ │ └── controller │ │ └── UserController.java │ ├── resources │ ├── applicationContext.xml │ ├── config │ │ ├── common.properties │ │ ├── database.properties │ │ ├── email.properties │ │ ├── menu.properties │ │ ├── redis.properties │ │ └── sms.properties │ ├── log4j.properties │ ├── log4j.properties.real │ ├── spring-servlet.xml │ ├── toolbox.xml │ ├── velocity-toolbox.xml │ └── velocity.properties │ └── webapp │ ├── WEB-INF │ └── web.xml │ └── index.jsp ├── client ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── university │ │ └── alumni │ │ └── client │ │ └── config │ │ └── HibernateConfiguration.java │ ├── resources │ ├── applicationContext.xml │ ├── config │ │ ├── common.properties │ │ ├── database.properties │ │ ├── email.properties │ │ ├── menu.properties │ │ ├── redis.properties │ │ └── sms.properties │ ├── log4j.properties │ ├── log4j.properties.real │ ├── spring-servlet.xml │ ├── toolbox.xml │ ├── velocity-toolbox.xml │ └── velocity.properties │ └── webapp │ ├── WEB-INF │ └── web.xml │ └── index.jsp ├── core ├── libs │ ├── jcaptcha-all-1.0-RC6.jar │ ├── patchca-0.5.0.jar │ └── taobao-sdk-java-auto_1455552377940-20160505.jar ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── university │ ├── alumni │ ├── application │ │ ├── UserService.java │ │ └── impl │ │ │ └── UserServiceImpl.java │ ├── dao │ │ ├── UserDao.java │ │ └── impl │ │ │ └── UserDaoImpl.java │ └── entity │ │ └── User.java │ └── common │ ├── config │ └── ConfigService.java │ ├── dao │ ├── BaseDao.java │ └── impl │ │ └── BaseDaoImpl.java │ ├── dto │ └── JsonResponseResult.java │ ├── filter │ └── SpringMVCSessionFilter.java │ ├── util │ ├── BaseUtils.java │ ├── CaptchaUtils.java │ ├── NoCheckUrlsUtils.java │ └── SHA256.java │ └── velocity │ └── tools │ ├── JsonTool.java │ ├── StaticFileTool.java │ └── UploadFileTool.java └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Example user template template 3 | ### Example user template 4 | 5 | # IntelliJ project files 6 | .idea 7 | *.iml 8 | out 9 | gen 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 河南工学院校友网管理系统 2 | 3 | [TOC] 4 | 5 | ## 项目来源 6 | 校友系统不只是一套软件系统,而是一整套“互联网+校友”的解决方案。校友系统通过帮助院校搭建校友互动平台和校友管理系统,拓展院校在校友服务方面的效率和范围,帮助院校提升校友工作信息化水平。 7 | 8 | ## 设计任务说明 9 | 按软件工程规范描述管理员端需求,细化用例规约,合理设计数据库,实现以下功能: 10 | 11 | ### 后台管理模块功能 12 | 1. 校友数据管理 13 | 1. 校友增删改 14 | 2. 校友快速搜索、高级搜索 15 | 3. 校友分组的增删改 16 | 4. 为校友重置登陆密码 17 | 提供以下10项校友统计方式:毕业年份、教育阶段、年龄、性别、民族、籍贯、政治面貌、单位性质、行业、所在省份。 18 | 2. 校友活动管理 19 | 1. 发起活动 20 | 2. 修改、删除活动 21 | 3. 管理活动报名情况(增删) 22 | 4. 导出活动报名表 23 | 5. 审核校友发起的活动 24 | 3. 新闻、公告管理 25 | 1. 新闻分类管理(增删改、排序) 26 | 2. 新闻管理(增删改、查询) 27 | 3. 公告管理(增删改、查询) 28 | 4. 校友资料管理 29 | 1. 校友文档分类管理(增删改、排序) 30 | 2. 校友文档管理(增删改、查询) 31 | 3. 校友相册管理(增删改、排序) 32 | 4. 校友视频分类管理(增删查改、排序) 33 | 5. 所有资料均可设置查看权限 34 | 6. 所有类型资料均支持校友上传,后台审核 35 | 36 | ### 前台模块功能 37 | 1. 网站首页 38 | 1. 能够显示出最新网站通知公告、校友新闻和学校活动,双击每个新闻通告的标题,可看到新闻内容,点击“更多”则进入该类的标题列表项。 39 | 2. 显示 Flash,可切换图片新闻,点击进入新闻内容。 40 | 3. 显示友情链接、网站帮助版权、信息和校庆专栏。 41 | 2. 校友新闻 42 | - 显示最新若干条校友新闻标题,点击后可进入详细内容,点击“更多”将显示该标题下的所有新闻列表。 43 | 3. 校友风采 44 | 1. 显示知名校友的姓名、简介和照片,点击“详细介绍”可了解该校友的详细情况。 45 | 2. 校友相册:对于每个注册成功的校友,可显示其名称、创建和更新日期和相册简介等。对于相册个人登录的情形,可进行新建和修改操作;查看他人相册,也可以发表评论。 46 | 4. 校友捐赠 47 | - 校友捐赠:显示最新若干条捐赠情况记录,点击“更多”进入所有列表,最新的若干条捐赠项目显示出来。向下滚动显示最新捐赠的捐赠校友的姓名、金额、捐赠日期等,并显示部分捐赠图片。 48 | 5. 校友服务 49 | - 学院简介及一些校内的相关部门链接。 50 | 6. 用户注册和登陆 51 | - 在某一页面左侧栏点击“登录校友网“即可进入登录页面,输入用户名、密码和验证码后点击“登录”,若信息正确则显示“登录成功”,同时异步更新页面的个人信息,显示个人头像、姓名、控制面板等信息;若看不清楚验证码,可点击验证码更换图片)。 52 | 7. 调查问卷功能: 53 | 1. 投票:阅读并填写调查问卷,点击投票按钮将投票信息上传至后台。 54 | 2. 查看结果:查看所有参与本次问卷调查校友的投票数据统计结果。 55 | 8. 站内搜索功能 56 | 57 | ## 项目介绍 58 | 本项目使用 Java 语言编写,后端框架 Spring + Springmvc + Hibernate ,前端框架 Jquery + Bootstrap ,数据库 mysql 59 | 60 | 未完待续…… -------------------------------------------------------------------------------- /admin/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | alumni 5 | com.university 6 | 1.0-SNAPSHOT 7 | 8 | 4.0.0 9 | admin 10 | war 11 | 12 | 13 | admin Maven Webapp 14 | http://maven.apache.org 15 | 16 | 17 | 18 | com.university 19 | core 20 | 1.0-SNAPSHOT 21 | 22 | 23 | junit 24 | junit 25 | 3.8.1 26 | test 27 | 28 | 29 | 30 | admin 31 | 32 | 33 | -------------------------------------------------------------------------------- /admin/src/main/java/com/university/alumni/admin/config/HibernateConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.admin.config; 2 | 3 | import com.mchange.v2.c3p0.ComboPooledDataSource; 4 | import org.hibernate.SessionFactory; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.ComponentScan; 8 | import org.springframework.context.annotation.Configuration; 9 | import org.springframework.context.annotation.PropertySource; 10 | import org.springframework.core.env.Environment; 11 | import org.springframework.jdbc.core.JdbcTemplate; 12 | import org.springframework.orm.hibernate4.HibernateTransactionManager; 13 | import org.springframework.orm.hibernate4.LocalSessionFactoryBean; 14 | import org.springframework.transaction.annotation.EnableTransactionManagement; 15 | 16 | import javax.sql.DataSource; 17 | import java.beans.PropertyVetoException; 18 | import java.sql.SQLException; 19 | import java.util.Properties; 20 | 21 | @Configuration 22 | @EnableTransactionManagement 23 | @ComponentScan({"com.university.alumni.admin.config"}) 24 | @PropertySource(value = "classpath:config/database.properties", ignoreResourceNotFound = false) 25 | public class HibernateConfiguration { 26 | 27 | @Autowired 28 | private Environment environment; 29 | 30 | @Bean 31 | public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { 32 | LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 33 | sessionFactory.setDataSource(dataSource); 34 | sessionFactory.setPackagesToScan(new String[]{"com.university.alumni.entity"}); 35 | sessionFactory.setHibernateProperties(hibernateProperties()); 36 | return sessionFactory; 37 | } 38 | 39 | @Bean 40 | public JdbcTemplate jdbcTemplate(DataSource dataSource) throws PropertyVetoException, SQLException { 41 | JdbcTemplate jdbcTemplate = new JdbcTemplate(); 42 | jdbcTemplate.setDataSource(dataSource); 43 | return jdbcTemplate; 44 | } 45 | 46 | @Bean 47 | public DataSource dataSource() throws PropertyVetoException, SQLException { 48 | String driver = environment.getRequiredProperty("database.connection.driver"); 49 | String url = environment.getRequiredProperty("database.connection.url"); 50 | String user = environment.getRequiredProperty("database.connection.user"); 51 | String password = environment.getRequiredProperty("database.connection.password"); 52 | return getDataSource(driver, url, user, password); 53 | } 54 | public DataSource getDataSource(String driver, String url, String user, String password) throws PropertyVetoException, SQLException { 55 | ComboPooledDataSource dataSource = new ComboPooledDataSource(); 56 | dataSource.setDriverClass(driver); 57 | dataSource.setJdbcUrl(url); 58 | dataSource.setUser(user); 59 | dataSource.setPassword(password); 60 | dataSource.setMinPoolSize(5); 61 | dataSource.setMaxPoolSize(30); 62 | dataSource.setMaxIdleTime(30); 63 | dataSource.setAcquireIncrement(3); 64 | // dataSource.setMaxStatements(1000); 65 | dataSource.setInitialPoolSize(10); 66 | 67 | dataSource.setAcquireRetryAttempts(30); 68 | dataSource.setAcquireRetryDelay(1000); 69 | dataSource.setTestConnectionOnCheckout(false); 70 | dataSource.setTestConnectionOnCheckin(true); 71 | dataSource.setBreakAfterAcquireFailure(false); 72 | 73 | dataSource.setPreferredTestQuery("select id from test where id = 1"); 74 | dataSource.setMaxStatements(0); 75 | dataSource.setIdleConnectionTestPeriod(60); 76 | dataSource.setCheckoutTimeout(10000); 77 | dataSource.setAutoCommitOnClose(false); 78 | 79 | return dataSource; 80 | } 81 | private Properties hibernateProperties() { 82 | Properties properties = new Properties(); 83 | properties.put("hibernate.autoReconnect", environment.getProperty("database.hibernate.autoReconnect")); 84 | properties.put("hibernate.connection.release_mode", environment.getProperty("database.hibernate.connection.release_mode")); 85 | properties.put("hibernate.temp.use_jdbc_metadata_defaults", environment.getProperty("database.hibernate.temp.use_jdbc_metadata_defaults")); 86 | properties.put("hibernate.hbm2ddl.auto", environment.getProperty("database.hibernate.hbm2ddl.auto")); 87 | properties.put("hibernate.dialect", environment.getProperty("database.hibernate.dialect")); 88 | properties.put("hibernate.show_sql", environment.getProperty("database.hibernate.show_sql")); 89 | properties.put("hibernate.format_sql", environment.getProperty("database.hibernate.format_sql")); 90 | properties.put("hibernate.use_sql_comments", environment.getProperty("database.hibernate.use_sql_comments")); 91 | properties.put("hibernate.jdbc.batch_size", environment.getProperty("database.hibernate.jdbc.batch_size")); 92 | properties.put("hibernate.connection.isolation", environment.getProperty("database.hibernate.connection.isolation")); 93 | return properties; 94 | } 95 | 96 | @Bean 97 | @Autowired 98 | public HibernateTransactionManager transactionManager(SessionFactory s) { 99 | HibernateTransactionManager txManager = new HibernateTransactionManager(); 100 | txManager.setSessionFactory(s); 101 | return txManager; 102 | } 103 | } 104 | 105 | 106 | -------------------------------------------------------------------------------- /admin/src/main/java/com/university/alumni/admin/web/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.admin.web.controller; 2 | 3 | import com.university.alumni.application.UserService; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | 11 | /** 12 | * Created by wm on 2017/1/19. 13 | */ 14 | @Controller 15 | @RequestMapping("/user") 16 | public class UserController { 17 | @Autowired 18 | private UserService userService; 19 | 20 | @RequestMapping("/addUser") 21 | public void addUser(String name , String age, HttpServletRequest request, HttpServletResponse response){ 22 | userService.addUser(name, age); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /admin/src/main/resources/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | org.springframework.web.servlet.view.JstlView 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | ../jsp/uploadCode 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /admin/src/main/resources/config/common.properties: -------------------------------------------------------------------------------- 1 | defaultPoolSize =5 2 | host=http://dev202.admin.cc.cmsa.cn 3 | pageSize=50 4 | examHost=172.21.120.201:15200 5 | adminHost=127.0.0.1:4040 -------------------------------------------------------------------------------- /admin/src/main/resources/config/database.properties: -------------------------------------------------------------------------------- 1 | ####################jdbc.properties######################################### 2 | database.connection.driver = com.mysql.jdbc.Driver 3 | database.connection.user = root 4 | database.connection.password =root 5 | database.connection.url = jdbc:mysql://localhost:3306/alumni?useUnicode=true&characterEncoding=utf8 6 | 7 | 8 | 9 | database.hibernate.schema_update = none 10 | database.hibernate.max_fetch_depth=0 11 | database.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect 12 | database.hibernate.show_sql = false 13 | database.hibernate.format_sql = true 14 | database.hibernate.use_sql_comments = true 15 | database.hibernate.jdbc.batch_size = 50 16 | database.hibernate.hbm2ddl.auto = none 17 | database.hibernate.connection.isolation=2 18 | database.hibernate.connection.release_mode=after_transaction 19 | database.hibernate.autoReconnect = true 20 | database.hibernate.temp.use_jdbc_metadata_defaults = false 21 | ####################jdbc.properties######################################### -------------------------------------------------------------------------------- /admin/src/main/resources/config/email.properties: -------------------------------------------------------------------------------- 1 | ####################email.properties######################################### 2 | smtpHostName=smtp.exmail.qq.com 3 | smtpEmail=no-reply@imsa.org.cn 4 | smtpPass=imsaORG123 5 | ##############email.properties############################## -------------------------------------------------------------------------------- /admin/src/main/resources/config/menu.properties: -------------------------------------------------------------------------------- 1 | ############## menuOrder.properties ############################## 2 | menuOrder.super= 3 | menuOrder.admin= 4 | menuOrder.user= 5 | ############## menuOrder.properties ############################## -------------------------------------------------------------------------------- /admin/src/main/resources/config/redis.properties: -------------------------------------------------------------------------------- 1 | redis_ip=127.0.0.1 2 | redis_port=6379 3 | redis_passKey=imsaRedis01 4 | -------------------------------------------------------------------------------- /admin/src/main/resources/config/sms.properties: -------------------------------------------------------------------------------- 1 | ##############sms.properties############################## 2 | sms.disabled = false 3 | sms.url = http://gw.api.taobao.com/router/rest 4 | sms.appKey = 23381733 5 | sms.appSecret = a1f307d8280946ac530bac9a66d039b6 6 | sms.signName = \u8d5b\u4e8b\u7ba1\u7406\u5e73\u53f0 7 | sms.templateCode = SMS_10315845 8 | 9 | #sms.host = app.cloopen.com 10 | #sms.port = 8883 11 | #sms.accountSid = 8a48b551511a2cec01511e6dd1ab0d34 12 | #sms.authToken = 1a879fe704014fdb9a4b48ddb4232329 13 | #sms.appId = aaf98f89524954cc0152540f6b0314e5 14 | #sms.templateId = 63084 15 | ##############sms.properties############################## -------------------------------------------------------------------------------- /admin/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | #log4j.rootLogger = [ level ] , appenderName, appenderName, ... 2 | log4j.rootLogger = info,console,R,RE 3 | #level=INFO,all can be output 4 | #console is set to be a ConsoleAppender 5 | 6 | ################### console ################### 7 | log4j.appender.console = org.apache.log4j.ConsoleAppender 8 | log4j.appender.console.layout = org.apache.log4j.PatternLayout 9 | log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%t] %m%n 10 | ################### console ################### 11 | 12 | 13 | ################### R ################### 14 | log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 15 | log4j.appender.R.Threshold = INFO 16 | log4j.appender.R.File = ${catalina.base}/logs/admin_info_log.txt 17 | log4j.appender.R.DatePattern='-'yyyy-MM-dd'.txt' 18 | log4j.appender.R.MaxFileSize = 10MB 19 | log4j.appender.R.MaxBackupIndex = 10000 20 | log4j.appender.R.layout = org.apache.log4j.PatternLayout 21 | log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%t] %m%n 22 | ################### R ################### 23 | 24 | 25 | ################### RE ################### 26 | log4j.appender.RE = org.apache.log4j.DailyRollingFileAppender 27 | log4j.appender.RE.Threshold = ERROR 28 | log4j.appender.RE.File = ${catalina.base}/logs/admin_error_log.txt 29 | log4j.appender.RE.DatePattern='-'yyyy-MM-dd'.txt' 30 | log4j.appender.RE.MaxFileSize = 10MB 31 | log4j.appender.RE.MaxBackupIndex = 10000 32 | log4j.appender.RE.layout = org.apache.log4j.PatternLayout 33 | log4j.appender.RE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%t] %m%n 34 | ################### RE ################### 35 | 36 | 37 | ################### hibernate ################### 38 | log4j.logger.org.hibernate=info 39 | ################### hibernate ################### 40 | 41 | ################### springframework ################### 42 | log4j.logger.org.springframework=error 43 | ################### springframework ################### 44 | -------------------------------------------------------------------------------- /admin/src/main/resources/log4j.properties.real: -------------------------------------------------------------------------------- 1 | #log4j.rootLogger = [ level ] , appenderName, appenderName, ... 2 | log4j.rootLogger = error, console, R 3 | #level=INFO,all can be output 4 | #console is set to be a ConsoleAppender 5 | 6 | log4j.appender.console = org.apache.log4j.ConsoleAppender 7 | #console have four patterns 8 | #org.apache.log4j.HTMLLayout 9 | #org.apache.log4j.PatternLayout 10 | #org.apache.log4j.SimpleLayout 11 | #org.apache.log4j.TTCCLayout 12 | log4j.appender.console.layout = org.apache.log4j.PatternLayout 13 | #define the output type 14 | log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n 15 | 16 | 17 | #file is set to output to a extra file 18 | log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 19 | #the absolute route of the log4j file 20 | log4j.appender.R.File = ${catalina.base}/logs/log.txt 21 | log4j.appender.R.DatePattern='-'yyyy-MM-dd 22 | #the size 23 | log4j.appender.R.MaxFileSize = 10MB 24 | #back up a file 25 | log4j.appender.R.MaxBackupIndex = 100 26 | log4j.appender.R.layout = org.apache.log4j.PatternLayout 27 | log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n 28 | 29 | log4j.appender.stdout.Threshold=trace 30 | 31 | 32 | #############hibernate################### 33 | # All hibernate log output of "info" level or higher goes to stdout. 34 | # For more verbose logging, change the "info" to "debug" on the last line. 35 | log4j.logger.org.hibernate.ps.PreparedStatementCache=error 36 | log4j.logger.org.hibernate=error 37 | log4j.category.org.hibernate.type=error 38 | # Changing the log level to DEBUG will result in Hibernate generated 39 | # SQL to be logged. 40 | log4j.logger.org.hibernate.SQL=error 41 | 42 | # Changing the log level to DEBUG will result in the PreparedStatement 43 | # bound variable values to be logged. 44 | log4j.logger.org.hibernate.type=error 45 | #############hibernate################### 46 | 47 | #############SprintFramework############# 48 | log4j.logger.org.springframework=error 49 | #############SprintFramework############# 50 | -------------------------------------------------------------------------------- /admin/src/main/resources/spring-servlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 21 | 22 | 24 | 25 | classpath:velocity.properties 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /admin/src/main/resources/toolbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | date 5 | request 6 | 7 | org.apache.velocity.tools.generic.DateTool 8 | 9 | 10 | 11 | 12 | link 13 | request 14 | org.apache.velocity.tools.view.tools.LinkTool 15 | 16 | 17 | stringUtils 18 | request 19 | org.apache.velocity.util.StringUtils 20 | 21 | 22 | math 23 | application 24 | org.apache.velocity.tools.generic.MathTool 25 | 26 | 27 | escape 28 | request 29 | org.apache.velocity.tools.generic.EscapeTool 30 | 31 | 32 | params 33 | request 34 | org.apache.velocity.tools.view.tools.ParameterParser 35 | 36 | 37 | json 38 | request 39 | com.zhongqi.common.velocity.tools.JsonTool 40 | 41 | 42 | upload 43 | request 44 | com.zhongqi.common.velocity.tools.UploadFileTool 45 | 46 | 47 | -------------------------------------------------------------------------------- /admin/src/main/resources/velocity-toolbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | date 5 | request 6 | 7 | org.apache.velocity.tools.generic.DateTool 8 | 9 | 10 | 11 | 12 | link 13 | request 14 | org.apache.velocity.tools.view.tools.LinkTool 15 | 16 | 17 | stringUtils 18 | request 19 | org.apache.velocity.util.StringUtils 20 | 21 | 22 | math 23 | application 24 | org.apache.velocity.tools.generic.MathTool 25 | 26 | 27 | escape 28 | request 29 | org.apache.velocity.tools.generic.EscapeTool 30 | 31 | 32 | params 33 | request 34 | org.apache.velocity.tools.view.tools.ParameterParser 35 | 36 | 37 | json 38 | request 39 | com.zhongqi.common.velocity.tools.JsonTool 40 | 41 | 42 | upload 43 | request 44 | com.zhongqi.common.velocity.tools.UploadFileTool 45 | 46 | 47 | 48 | static 49 | request 50 | com.zhongqi.common.velocity.tools.StaticFileTool 51 | 52 | 53 | -------------------------------------------------------------------------------- /admin/src/main/resources/velocity.properties: -------------------------------------------------------------------------------- 1 | velocimacro.permissions.allow.inline=true 2 | velocimacro.permissions.allow.inline.to.replace.global=true 3 | velocimacro.permissions.allow.inline.local.scope=true 4 | input.encoding=UTF-8 5 | output.encoding=UTF-8 6 | resource.loader=webapp, class 7 | class.resource.loader.description=Velocity Classpath Resource Loader 8 | class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 9 | webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader 10 | webapp.resource.loader.path=/views/ 11 | webapp.resource.loader.cache=false -------------------------------------------------------------------------------- /admin/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | alumni.admin 10 | 11 | 12 | 13 | index.jsp 14 | 15 | 16 | 17 | org.springframework.web.context.ContextLoaderListener 18 | 19 | 20 | 21 | 22 | contextConfigLocation 23 | classpath:applicationContext.xml 24 | 25 | 26 | 27 | spring 28 | org.springframework.web.servlet.DispatcherServlet 29 | 30 | contextConfigLocation 31 | classpath:spring-servlet.xml 32 | 33 | 1 34 | 35 | 36 | 37 | spring 38 | *.do 39 | 40 | 41 | 42 | 43 | 30 44 | 45 | 46 | 47 | 48 | hibernate4Filter 49 | org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 50 | 51 | 52 | hibernate4Filter 53 | /* 54 | 55 | 56 | 57 | 58 | 59 | SpringCharacterEncodingFilter 60 | org.springframework.web.filter.CharacterEncodingFilter 61 | 62 | encoding 63 | UTF-8 64 | 65 | 66 | 67 | SpringCharacterEncodingFilter 68 | /* 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /admin/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Hello World,admin's page here .

4 | 5 | 6 | -------------------------------------------------------------------------------- /client/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | alumni 5 | com.university 6 | 1.0-SNAPSHOT 7 | 8 | 4.0.0 9 | client 10 | war 11 | client Maven Webapp 12 | http://maven.apache.org 13 | 14 | 15 | com.university 16 | core 17 | 1.0-SNAPSHOT 18 | 19 | 20 | junit 21 | junit 22 | 3.8.1 23 | test 24 | 25 | 26 | 27 | client 28 | 29 | 30 | -------------------------------------------------------------------------------- /client/src/main/java/com/university/alumni/client/config/HibernateConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.client.config; 2 | 3 | import com.mchange.v2.c3p0.ComboPooledDataSource; 4 | import org.hibernate.SessionFactory; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.ComponentScan; 8 | import org.springframework.context.annotation.Configuration; 9 | import org.springframework.context.annotation.PropertySource; 10 | import org.springframework.core.env.Environment; 11 | import org.springframework.jdbc.core.JdbcTemplate; 12 | import org.springframework.orm.hibernate4.HibernateTransactionManager; 13 | import org.springframework.orm.hibernate4.LocalSessionFactoryBean; 14 | import org.springframework.transaction.annotation.EnableTransactionManagement; 15 | 16 | import javax.sql.DataSource; 17 | import java.beans.PropertyVetoException; 18 | import java.sql.SQLException; 19 | import java.util.Properties; 20 | 21 | @Configuration 22 | @EnableTransactionManagement 23 | @ComponentScan({"com.university.alumni.client.config"}) 24 | @PropertySource(value = "classpath:config/database.properties", ignoreResourceNotFound = false) 25 | public class HibernateConfiguration { 26 | 27 | @Autowired 28 | private Environment environment; 29 | 30 | @Bean 31 | public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { 32 | LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 33 | sessionFactory.setDataSource(dataSource); 34 | sessionFactory.setPackagesToScan(new String[]{"com.university.alumni.entity"}); 35 | sessionFactory.setHibernateProperties(hibernateProperties()); 36 | return sessionFactory; 37 | } 38 | 39 | @Bean 40 | public JdbcTemplate jdbcTemplate(DataSource dataSource) throws PropertyVetoException, SQLException { 41 | JdbcTemplate jdbcTemplate = new JdbcTemplate(); 42 | jdbcTemplate.setDataSource(dataSource); 43 | return jdbcTemplate; 44 | } 45 | 46 | @Bean 47 | public DataSource dataSource() throws PropertyVetoException, SQLException { 48 | String driver = environment.getRequiredProperty("database.connection.driver"); 49 | String url = environment.getRequiredProperty("database.connection.url"); 50 | String user = environment.getRequiredProperty("database.connection.user"); 51 | String password = environment.getRequiredProperty("database.connection.password"); 52 | return getDataSource(driver, url, user, password); 53 | } 54 | public DataSource getDataSource(String driver, String url, String user, String password) throws PropertyVetoException, SQLException { 55 | ComboPooledDataSource dataSource = new ComboPooledDataSource(); 56 | dataSource.setDriverClass(driver); 57 | dataSource.setJdbcUrl(url); 58 | dataSource.setUser(user); 59 | dataSource.setPassword(password); 60 | dataSource.setMinPoolSize(5); 61 | dataSource.setMaxPoolSize(30); 62 | dataSource.setMaxIdleTime(30); 63 | dataSource.setAcquireIncrement(3); 64 | // dataSource.setMaxStatements(1000); 65 | dataSource.setInitialPoolSize(10); 66 | 67 | dataSource.setAcquireRetryAttempts(30); 68 | dataSource.setAcquireRetryDelay(1000); 69 | dataSource.setTestConnectionOnCheckout(false); 70 | dataSource.setTestConnectionOnCheckin(true); 71 | dataSource.setBreakAfterAcquireFailure(false); 72 | 73 | dataSource.setPreferredTestQuery("select id from test where id = 1"); 74 | dataSource.setMaxStatements(0); 75 | dataSource.setIdleConnectionTestPeriod(60); 76 | dataSource.setCheckoutTimeout(10000); 77 | dataSource.setAutoCommitOnClose(false); 78 | 79 | return dataSource; 80 | } 81 | private Properties hibernateProperties() { 82 | Properties properties = new Properties(); 83 | properties.put("hibernate.autoReconnect", environment.getProperty("database.hibernate.autoReconnect")); 84 | properties.put("hibernate.connection.release_mode", environment.getProperty("database.hibernate.connection.release_mode")); 85 | properties.put("hibernate.temp.use_jdbc_metadata_defaults", environment.getProperty("database.hibernate.temp.use_jdbc_metadata_defaults")); 86 | properties.put("hibernate.hbm2ddl.auto", environment.getProperty("database.hibernate.hbm2ddl.auto")); 87 | properties.put("hibernate.dialect", environment.getProperty("database.hibernate.dialect")); 88 | properties.put("hibernate.show_sql", environment.getProperty("database.hibernate.show_sql")); 89 | properties.put("hibernate.format_sql", environment.getProperty("database.hibernate.format_sql")); 90 | properties.put("hibernate.use_sql_comments", environment.getProperty("database.hibernate.use_sql_comments")); 91 | properties.put("hibernate.jdbc.batch_size", environment.getProperty("database.hibernate.jdbc.batch_size")); 92 | properties.put("hibernate.connection.isolation", environment.getProperty("database.hibernate.connection.isolation")); 93 | return properties; 94 | } 95 | 96 | @Bean 97 | @Autowired 98 | public HibernateTransactionManager transactionManager(SessionFactory s) { 99 | HibernateTransactionManager txManager = new HibernateTransactionManager(); 100 | txManager.setSessionFactory(s); 101 | return txManager; 102 | } 103 | } 104 | 105 | 106 | -------------------------------------------------------------------------------- /client/src/main/resources/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | org.springframework.web.servlet.view.JstlView 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | ../jsp/uploadCode 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /client/src/main/resources/config/common.properties: -------------------------------------------------------------------------------- 1 | defaultPoolSize =5 2 | host=http://dev202.admin.cc.cmsa.cn 3 | pageSize=50 4 | examHost=172.21.120.201:15200 5 | 6 | match-start-time=9 7 | match-end-time=15 8 | 9 | match-start-time.weiqi=9 10 | match-end-time.weiqi=15 -------------------------------------------------------------------------------- /client/src/main/resources/config/database.properties: -------------------------------------------------------------------------------- 1 | ####################jdbc.properties######################################### 2 | database.connection.driver = com.mysql.jdbc.Driver 3 | database.connection.user = root 4 | database.connection.password =root 5 | database.connection.url = jdbc:mysql://localhost:3306/alumni?useUnicode=true&characterEncoding=utf8 6 | 7 | 8 | 9 | database.hibernate.schema_update = none 10 | database.hibernate.max_fetch_depth=0 11 | database.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect 12 | database.hibernate.show_sql = false 13 | database.hibernate.format_sql = true 14 | database.hibernate.use_sql_comments = true 15 | database.hibernate.jdbc.batch_size = 50 16 | database.hibernate.hbm2ddl.auto = none 17 | database.hibernate.connection.isolation=2 18 | database.hibernate.connection.release_mode=after_transaction 19 | database.hibernate.autoReconnect = true 20 | database.hibernate.temp.use_jdbc_metadata_defaults = false 21 | ####################jdbc.properties######################################### -------------------------------------------------------------------------------- /client/src/main/resources/config/email.properties: -------------------------------------------------------------------------------- 1 | ####################email.properties######################################### 2 | smtpHostName=smtp.exmail.qq.com 3 | smtpEmail=no-reply@imsa.org.cn 4 | smtpPass=imsaORG123 5 | ##############email.properties############################## -------------------------------------------------------------------------------- /client/src/main/resources/config/menu.properties: -------------------------------------------------------------------------------- 1 | ############## menuOrder.properties ############################## 2 | menuOrder.super= 3 | menuOrder.admin= 4 | menuOrder.user= 5 | ############## menuOrder.properties ############################## -------------------------------------------------------------------------------- /client/src/main/resources/config/redis.properties: -------------------------------------------------------------------------------- 1 | redis_ip=127.0.0.1 2 | redis_port=6379 3 | redis_passKey=imsaRedis01 4 | -------------------------------------------------------------------------------- /client/src/main/resources/config/sms.properties: -------------------------------------------------------------------------------- 1 | ##############sms.properties############################## 2 | 3 | sms.disabled = false 4 | sms.url = http://gw.api.taobao.com/router/rest 5 | sms.appKey = 23551977 6 | sms.appSecret = b4db51d23014a72fe315b706861b2ada 7 | sms.signName = \u8d5b\u4e8b\u7ba1\u7406\u5e73\u53f0 8 | sms.templateCode = SMS_10315845 9 | 10 | # old 11 | #sms.disabled = false 12 | #sms.url = http://gw.api.taobao.com/router/rest 13 | #sms.appKey = 23381733 14 | #sms.appSecret = a1f307d8280946ac530bac9a66d039b6 15 | #sms.signName = \u8d5b\u4e8b\u7ba1\u7406\u5e73\u53f0 16 | #sms.templateCode = SMS_10315845 17 | 18 | #sms.host = app.cloopen.com 19 | #sms.port = 8883 20 | #sms.accountSid = 8a48b551511a2cec01511e6dd1ab0d34 21 | #sms.authToken = 1a879fe704014fdb9a4b48ddb4232329 22 | #sms.appId = aaf98f89524954cc0152540f6b0314e5 23 | #sms.templateId = 63084 24 | ##############sms.properties############################## -------------------------------------------------------------------------------- /client/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | #log4j.rootLogger = [ level ] , appenderName, appenderName, ... 2 | log4j.rootLogger = info,console,R,RE 3 | #level=INFO,all can be output 4 | #console is set to be a ConsoleAppender 5 | 6 | ################### console ################### 7 | log4j.appender.console = org.apache.log4j.ConsoleAppender 8 | log4j.appender.console.layout = org.apache.log4j.PatternLayout 9 | log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%t] %m%n 10 | ################### console ################### 11 | 12 | 13 | ################### R ################### 14 | log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 15 | log4j.appender.R.Threshold = INFO 16 | log4j.appender.R.File = ${catalina.base}/logs/client_info_log.txt 17 | log4j.appender.R.DatePattern='-'yyyy-MM-dd'.txt' 18 | log4j.appender.R.MaxFileSize = 10MB 19 | log4j.appender.R.MaxBackupIndex = 10000 20 | log4j.appender.R.layout = org.apache.log4j.PatternLayout 21 | log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%t] %m%n 22 | ################### R ################### 23 | 24 | 25 | ################### RE ################### 26 | log4j.appender.RE = org.apache.log4j.DailyRollingFileAppender 27 | log4j.appender.RE.Threshold = ERROR 28 | log4j.appender.RE.File = ${catalina.base}/logs/client_error_log.txt 29 | log4j.appender.RE.DatePattern='-'yyyy-MM-dd'.txt' 30 | log4j.appender.RE.MaxFileSize = 10MB 31 | log4j.appender.RE.MaxBackupIndex = 10000 32 | log4j.appender.RE.layout = org.apache.log4j.PatternLayout 33 | log4j.appender.RE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%t] %m%n 34 | ################### RE ################### 35 | 36 | 37 | ################### hibernate ################### 38 | log4j.logger.org.hibernate=info 39 | ################### hibernate ################### 40 | 41 | ################### springframework ################### 42 | log4j.logger.org.springframework=error 43 | ################### springframework ################### 44 | -------------------------------------------------------------------------------- /client/src/main/resources/log4j.properties.real: -------------------------------------------------------------------------------- 1 | #log4j.rootLogger = [ level ] , appenderName, appenderName, ... 2 | log4j.rootLogger = error, console, R 3 | #level=INFO,all can be output 4 | #console is set to be a ConsoleAppender 5 | 6 | log4j.appender.console = org.apache.log4j.ConsoleAppender 7 | #console have four patterns 8 | #org.apache.log4j.HTMLLayout 9 | #org.apache.log4j.PatternLayout 10 | #org.apache.log4j.SimpleLayout 11 | #org.apache.log4j.TTCCLayout 12 | log4j.appender.console.layout = org.apache.log4j.PatternLayout 13 | #define the output type 14 | log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n 15 | 16 | 17 | #file is set to output to a extra file 18 | log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 19 | #the absolute route of the log4j file 20 | log4j.appender.R.File = ${catalina.base}/logs/log.txt 21 | log4j.appender.R.DatePattern='-'yyyy-MM-dd 22 | #the size 23 | log4j.appender.R.MaxFileSize = 10MB 24 | #back up a file 25 | log4j.appender.R.MaxBackupIndex = 100 26 | log4j.appender.R.layout = org.apache.log4j.PatternLayout 27 | log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n 28 | 29 | log4j.appender.stdout.Threshold=trace 30 | 31 | 32 | #############hibernate################### 33 | # All hibernate log output of "info" level or higher goes to stdout. 34 | # For more verbose logging, change the "info" to "debug" on the last line. 35 | log4j.logger.org.hibernate.ps.PreparedStatementCache=error 36 | log4j.logger.org.hibernate=error 37 | log4j.category.org.hibernate.type=error 38 | # Changing the log level to DEBUG will result in Hibernate generated 39 | # SQL to be logged. 40 | log4j.logger.org.hibernate.SQL=error 41 | 42 | # Changing the log level to DEBUG will result in the PreparedStatement 43 | # bound variable values to be logged. 44 | log4j.logger.org.hibernate.type=error 45 | #############hibernate################### 46 | 47 | #############SprintFramework############# 48 | log4j.logger.org.springframework=error 49 | #############SprintFramework############# 50 | -------------------------------------------------------------------------------- /client/src/main/resources/spring-servlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 21 | 22 | 24 | 25 | classpath:velocity.properties 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /client/src/main/resources/toolbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | date 5 | request 6 | 7 | org.apache.velocity.tools.generic.DateTool 8 | 9 | 10 | 11 | 12 | link 13 | request 14 | org.apache.velocity.tools.view.tools.LinkTool 15 | 16 | 17 | stringUtils 18 | request 19 | org.apache.velocity.util.StringUtils 20 | 21 | 22 | math 23 | application 24 | org.apache.velocity.tools.generic.MathTool 25 | 26 | 27 | escape 28 | request 29 | org.apache.velocity.tools.generic.EscapeTool 30 | 31 | 32 | params 33 | request 34 | org.apache.velocity.tools.view.tools.ParameterParser 35 | 36 | 37 | json 38 | request 39 | com.zhongqi.common.velocity.tools.JsonTool 40 | 41 | 42 | upload 43 | request 44 | com.zhongqi.common.velocity.tools.UploadFileTool 45 | 46 | 47 | -------------------------------------------------------------------------------- /client/src/main/resources/velocity-toolbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | date 5 | request 6 | 7 | org.apache.velocity.tools.generic.DateTool 8 | 9 | 10 | 11 | 12 | link 13 | request 14 | org.apache.velocity.tools.view.tools.LinkTool 15 | 16 | 17 | stringUtils 18 | request 19 | org.apache.velocity.util.StringUtils 20 | 21 | 22 | math 23 | application 24 | org.apache.velocity.tools.generic.MathTool 25 | 26 | 27 | escape 28 | request 29 | org.apache.velocity.tools.generic.EscapeTool 30 | 31 | 32 | params 33 | request 34 | org.apache.velocity.tools.view.tools.ParameterParser 35 | 36 | 37 | json 38 | request 39 | com.zhongqi.common.velocity.tools.JsonTool 40 | 41 | 42 | upload 43 | request 44 | com.zhongqi.common.velocity.tools.UploadFileTool 45 | 46 | 47 | 48 | static 49 | request 50 | com.zhongqi.common.velocity.tools.StaticFileTool 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /client/src/main/resources/velocity.properties: -------------------------------------------------------------------------------- 1 | velocimacro.permissions.allow.inline=true 2 | velocimacro.permissions.allow.inline.to.replace.global=true 3 | velocimacro.permissions.allow.inline.local.scope=true 4 | input.encoding=UTF-8 5 | output.encoding=UTF-8 6 | resource.loader=webapp, class 7 | class.resource.loader.description=Velocity Classpath Resource Loader 8 | class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 9 | webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader 10 | webapp.resource.loader.path=/views/ 11 | webapp.resource.loader.cache=false -------------------------------------------------------------------------------- /client/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Archetype Created Web Application 7 | 8 | -------------------------------------------------------------------------------- /client/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Hello World,client's page here.

4 | 5 | 6 | -------------------------------------------------------------------------------- /core/libs/jcaptcha-all-1.0-RC6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1111111ww/alumni/aeee8528f274bd3844d6566e4ff95818bc64bb2c/core/libs/jcaptcha-all-1.0-RC6.jar -------------------------------------------------------------------------------- /core/libs/patchca-0.5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1111111ww/alumni/aeee8528f274bd3844d6566e4ff95818bc64bb2c/core/libs/patchca-0.5.0.jar -------------------------------------------------------------------------------- /core/libs/taobao-sdk-java-auto_1455552377940-20160505.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1111111ww/alumni/aeee8528f274bd3844d6566e4ff95818bc64bb2c/core/libs/taobao-sdk-java-auto_1455552377940-20160505.jar -------------------------------------------------------------------------------- /core/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | alumni 7 | com.university 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | core 13 | 14 | 15 | 16 | 17 | 18 | com.h2database 19 | h2 20 | 1.4.190 21 | 22 | 23 | 24 | org.hibernate 25 | hibernate-core 26 | 27 | ${hibernate.version} 28 | 29 | 30 | 31 | org.hibernate 32 | hibernate-entitymanager 33 | ${hibernate.version} 34 | 35 | 36 | org.hibernate 37 | hibernate-c3p0 38 | ${hibernate.version} 39 | 40 | 41 | 42 | junit 43 | junit 44 | 3.8.1 45 | test 46 | 47 | 48 | org.springframework 49 | spring-web 50 | ${springframework.version} 51 | 52 | 53 | org.springframework 54 | spring-test 55 | ${springframework.version} 56 | test 57 | 58 | 59 | org.springframework 60 | spring-webmvc 61 | ${springframework.version} 62 | 63 | 64 | org.springframework 65 | spring-tx 66 | ${springframework.version} 67 | 68 | 69 | org.springframework 70 | spring-context-support 71 | ${springframework.version} 72 | 73 | 74 | org.springframework.data 75 | spring-data-jpa 76 | 1.9.0.RELEASE 77 | 78 | 79 | 80 | org.apache.commons 81 | commons-dbcp2 82 | 2.1.1 83 | 84 | 85 | 86 | org.eclipse.persistence 87 | javax.persistence 88 | 2.1.0 89 | 90 | 91 | 92 | mysql 93 | mysql-connector-java 94 | 5.1.30 95 | 96 | 97 | 98 | 99 | 100 | com.fasterxml.jackson.core 101 | jackson-databind 102 | ${jackson.version} 103 | 104 | 105 | net.sf.json-lib 106 | json-lib 107 | 2.4 108 | jdk15 109 | 110 | 111 | commons-httpclient 112 | commons-httpclient 113 | 3.1 114 | 115 | 116 | 117 | commons-beanutils 118 | commons-beanutils 119 | 1.8.0 120 | 121 | 122 | commons-codec 123 | commons-codec 124 | 1.9 125 | 126 | 127 | 128 | commons-lang 129 | commons-lang 130 | 2.2 131 | 132 | 133 | 134 | commons-logging 135 | commons-logging 136 | 1.1.1 137 | 138 | 139 | net.sf.ezmorph 140 | ezmorph 141 | 1.0.4 142 | 143 | 144 | 145 | org.apache.httpcomponents 146 | httpcore 147 | 4.3.3 148 | 149 | 150 | org.apache.httpcomponents 151 | httpclient 152 | 4.3.6 153 | 154 | 155 | 156 | org.apache.poi 157 | poi-ooxml 158 | 3.10-FINAL 159 | 160 | 161 | org.apache.poi 162 | poi 163 | 3.10-FINAL 164 | 165 | 166 | org.apache.commons 167 | commons-lang3 168 | 3.4 169 | 170 | 171 | commons-net 172 | commons-net 173 | 2.0 174 | 175 | 176 | commons-io 177 | commons-io 178 | 2.4 179 | 180 | 181 | 182 | 183 | org.apache.commons 184 | commons-email 185 | 1.3.2 186 | 187 | 188 | com.google.code.gson 189 | gson 190 | 2.2.4 191 | 192 | 193 | 194 | org.slf4j 195 | slf4j-api 196 | 1.7.12 197 | 198 | 199 | org.slf4j 200 | jcl-over-slf4j 201 | 1.7.12 202 | runtime 203 | 204 | 205 | org.slf4j 206 | slf4j-log4j12 207 | 1.7.12 208 | runtime 209 | 210 | 211 | log4j 212 | log4j 213 | 1.2.17 214 | 215 | 216 | jstl 217 | jstl 218 | 1.2 219 | 220 | 221 | 222 | org.quartz-scheduler 223 | quartz 224 | 2.2.1 225 | 226 | 227 | javax.mail 228 | mail 229 | 1.4 230 | 231 | 232 | 233 | javax.servlet 234 | jsp-api 235 | 2.0 236 | 237 | 238 | 239 | javax.servlet 240 | javax.servlet-api 241 | 3.1.0 242 | 243 | 244 | org.codehaus.jettison 245 | jettison 246 | 1.0-RC2 247 | 248 | 249 | aspectj 250 | aspectjlib 251 | 1.5.3 252 | 253 | 254 | org.aspectj 255 | aspectjweaver 256 | 1.8.9 257 | 258 | 259 | commons-collections 260 | commons-collections 261 | 3.2.2 262 | 263 | 264 | 265 | commons-fileupload 266 | commons-fileupload 267 | 1.3.1 268 | 269 | 270 | org.springframework.amqp 271 | spring-rabbit 272 | 1.5.3.RELEASE 273 | 274 | 275 | com.octo.captcha 276 | jcaptcha 277 | 1.0 278 | system 279 | ${libs.path}/libs/jcaptcha-all-1.0-RC6.jar 280 | 281 | 282 | com.taobao.api 283 | taobao-sdk-java-auto 284 | 1.0 285 | system 286 | ${libs.path}/libs/taobao-sdk-java-auto_1455552377940-20160505.jar 287 | 288 | 289 | 290 | patchca 291 | patchca 292 | 1.0 293 | system 294 | ${libs.path}/libs/patchca-0.5.0.jar 295 | 296 | 297 | 298 | javax.validation 299 | validation-api 300 | 1.1.0.Final 301 | 302 | 303 | org.hibernate 304 | hibernate-validator 305 | 5.0.1.Final 306 | 307 | 308 | joda-time 309 | joda-time 310 | 2.9.4 311 | 312 | 313 | org.apache.velocity 314 | velocity 315 | 1.7 316 | 317 | 318 | org.apache.velocity 319 | velocity-tools 320 | 2.0 321 | 322 | 323 | org.owasp.esapi 324 | esapi 325 | 2.1.0.1 326 | 327 | 328 | org.codehaus.jackson 329 | jackson-mapper-asl 330 | 1.9.7 331 | 332 | 333 | org.codehaus.jackson 334 | jackson-core-asl 335 | 1.9.7 336 | 337 | 338 | 339 | org.jsoup 340 | jsoup 341 | 1.9.1 342 | 343 | 344 | 345 | redis.clients 346 | jedis 347 | 2.7.3 348 | 349 | 350 | 351 | com.dyuproject.protostuff 352 | protostuff-core 353 | 1.0.8 354 | 355 | 356 | 357 | com.dyuproject.protostuff 358 | protostuff-runtime 359 | 1.0.8 360 | 361 | 362 | 363 | 364 | 365 | UTF-8 366 | 367 | 368 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/alumni/application/UserService.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.application; 2 | 3 | import com.university.alumni.entity.User; 4 | 5 | /** 6 | * Created by wm on 2017/1/19. 7 | */ 8 | public interface UserService { 9 | public User addUser(String name,String age); 10 | } 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/alumni/application/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.application.impl; 2 | 3 | import com.university.alumni.application.UserService; 4 | import com.university.alumni.dao.UserDao; 5 | import com.university.alumni.entity.User; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.transaction.annotation.Transactional; 9 | 10 | /** 11 | * Created by wm on 2017/1/19. 12 | */ 13 | @Service 14 | public class UserServiceImpl implements UserService{ 15 | @Autowired 16 | private UserDao userDao; 17 | 18 | 19 | @Override 20 | @Transactional 21 | public User addUser(String name, String age) { 22 | return userDao.addUser(name, age); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/alumni/dao/UserDao.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.dao; 2 | 3 | import com.university.alumni.entity.User; 4 | 5 | /** 6 | * Created by wm on 2017/1/19. 7 | */ 8 | public interface UserDao { 9 | public User addUser(String name,String age); 10 | } 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/alumni/dao/impl/UserDaoImpl.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.dao.impl; 2 | 3 | import com.university.alumni.dao.UserDao; 4 | import com.university.alumni.entity.User; 5 | import com.university.common.dao.impl.BaseDaoImpl; 6 | import org.springframework.stereotype.Repository; 7 | 8 | /** 9 | * Created by wm on 2017/1/19. 10 | */ 11 | @Repository 12 | public class UserDaoImpl extends BaseDaoImpl implements UserDao { 13 | 14 | @Override 15 | public User addUser(String name, String age) { 16 | User user=new User(); 17 | user.setName("娜娜"); 18 | user.setAge("19"); 19 | save(user); 20 | return user; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/alumni/entity/User.java: -------------------------------------------------------------------------------- 1 | package com.university.alumni.entity; 2 | 3 | import javax.persistence.*; 4 | 5 | /** 6 | * Created by wm on 2017/1/18. 7 | */ 8 | @Entity 9 | @Table(name="User") 10 | public class User { 11 | private Integer id; 12 | private String name; 13 | private String age; 14 | 15 | @Id 16 | @GeneratedValue(strategy = GenerationType.IDENTITY) 17 | @Column(name="id",unique = true,nullable = false) 18 | public Integer getId() { 19 | return id; 20 | } 21 | 22 | public void setId(Integer id) { 23 | this.id = id; 24 | } 25 | 26 | @Column(name = "name",nullable = true) 27 | public String getName() { 28 | return name; 29 | } 30 | 31 | public void setName(String name) { 32 | this.name = name; 33 | } 34 | 35 | @Column(name = "age",nullable = true) 36 | public String getAge() { 37 | return age; 38 | } 39 | 40 | public void setAge(String age) { 41 | this.age = age; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/config/ConfigService.java: -------------------------------------------------------------------------------- 1 | package com.university.common.config; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.context.annotation.PropertySource; 5 | import org.springframework.core.env.Environment; 6 | import org.springframework.stereotype.Component; 7 | 8 | /** 9 | * Created by leo on 16/4/16. 10 | */ 11 | @Component("configService") 12 | @PropertySource(value = "classpath:config/common.properties", ignoreResourceNotFound = true) 13 | @PropertySource(value = "classpath:config/database.properties", ignoreResourceNotFound = true) 14 | @PropertySource(value = "classpath:config/email.properties", ignoreResourceNotFound = true) 15 | @PropertySource(value = "classpath:config/sms.properties", ignoreResourceNotFound = true) 16 | @PropertySource(value = "classpath:config/menu.properties", ignoreResourceNotFound = true) 17 | public class ConfigService { 18 | 19 | @Autowired 20 | private Environment env; 21 | 22 | public String getPropertyValue(String key) { 23 | return env.getProperty(key); 24 | } 25 | 26 | 27 | //******************** email config start ******************** 28 | 29 | public String getSmtpEmail() { 30 | return env.getProperty("smtpEmail"); 31 | } 32 | 33 | public String getSmtpHostName() { 34 | return env.getProperty("smtpHostName"); 35 | } 36 | 37 | public String getSmtpPass() { 38 | return env.getProperty("smtpPass"); 39 | } 40 | 41 | //******************** email config start ******************** 42 | 43 | 44 | //******************** host config start ******************** 45 | 46 | public String getHost() { 47 | return env.getProperty("host"); 48 | } 49 | 50 | //******************** host config end ******************** 51 | 52 | 53 | //******************** sms config start ******************** 54 | 55 | public String getSMSDisabled() { 56 | return env.getProperty("sms.disabled"); 57 | } 58 | 59 | public String getSMSUrl() { 60 | return env.getProperty("sms.url"); 61 | } 62 | 63 | public String getSMSAppKey() { 64 | return env.getProperty("sms.appKey"); 65 | } 66 | 67 | public String getSMSAppSecret() { 68 | return env.getProperty("sms.appSecret"); 69 | } 70 | 71 | public String getSMSSignName() { 72 | return env.getProperty("sms.signName"); 73 | } 74 | 75 | public String getSMSTemplateCode() { 76 | return env.getProperty("sms.templateCode"); 77 | } 78 | 79 | //******************** sms config end ******************** 80 | 81 | 82 | //******************** page config start ******************** 83 | 84 | public String getPageSize() { 85 | return env.getProperty("pageSize"); 86 | } 87 | 88 | //******************** page config end ******************** 89 | 90 | 91 | //******************** examHost config start ******************** 92 | 93 | public String getExamHost() { 94 | return env.getProperty("examHost"); 95 | } 96 | 97 | //******************** examHost config end ******************** 98 | 99 | 100 | //******************** adminHost config start ******************** 101 | 102 | public String getAdminHost() { 103 | return env.getProperty("adminHost"); 104 | } 105 | 106 | //******************** adminHost config end ******************** 107 | 108 | 109 | //******************** match start end time ******************** 110 | 111 | public String getMatchStartTime(){ 112 | return env.getProperty("match-start-time"); 113 | } 114 | 115 | public String getMatchEndTime(){ 116 | return env.getProperty("match-end-time"); 117 | } 118 | 119 | public String getMatchStartTime_weiqi(){ 120 | return env.getProperty("match-start-time.weiqi"); 121 | } 122 | 123 | public String getMatchEndTime_weiqi(){ 124 | return env.getProperty("match-end-time.weiqi"); 125 | } 126 | 127 | //******************** match start end time ******************** 128 | 129 | 130 | public String getMenuOrderStr(Integer roleType){ 131 | String orderStr = ""; 132 | 133 | switch (roleType){ 134 | case 1 : 135 | orderStr = env.getProperty("menuOrder.super"); 136 | break; 137 | case 2 : 138 | orderStr = env.getProperty("menuOrder.admin"); 139 | break; 140 | case 3 : 141 | orderStr = env.getProperty("menuOrder.user"); 142 | break; 143 | } 144 | 145 | return orderStr; 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/dao/BaseDao.java: -------------------------------------------------------------------------------- 1 | package com.university.common.dao; 2 | 3 | 4 | import org.springframework.jdbc.core.JdbcTemplate; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 基础数据库操作类 11 | * 12 | * @author ss 13 | */ 14 | public interface BaseDao { 15 | 16 | /** 17 | * 保存一个对象 18 | * 19 | * @param o 20 | * @return 21 | */ 22 | public Serializable save(T o); 23 | 24 | /** 25 | * 删除一个对象 26 | * 27 | * @param o 28 | */ 29 | public void delete(T o); 30 | 31 | /** 32 | * 更新一个对象 33 | * 34 | * @param o 35 | */ 36 | public void update(T o); 37 | 38 | /** 39 | * 保存或更新对象 40 | * 41 | * @param o 42 | */ 43 | public void saveOrUpdate(T o); 44 | 45 | /** 46 | * 查询 47 | * 48 | * @param hql 49 | * @return 50 | */ 51 | public List find(String hql); 52 | 53 | /** 54 | * 查询集合 55 | * 56 | * @param hql 57 | * @param param 58 | * @return 59 | */ 60 | public List find(String hql, Object[] param); 61 | 62 | /** 63 | * 查询集合 64 | * 65 | * @param hql 66 | * @param param 67 | * @return 68 | */ 69 | public List find(String hql, List param); 70 | 71 | /** 72 | * 查询集合(带分页) 73 | * 74 | * @param hql 75 | * @param param 76 | * @param page 查询第几页 77 | * @param rows 每页显示几条记录 78 | * @return 79 | */ 80 | public List find(String hql, Object[] param, Integer page, Integer rows); 81 | 82 | /** 83 | * 查询集合(带分页) 84 | * 85 | * @param hql 86 | * @param param 87 | * @param page 88 | * @param rows 89 | * @return 90 | */ 91 | public List find(String hql, List param, Integer page, Integer rows); 92 | 93 | /** 94 | * 获得一个对象 95 | * 96 | * @param c 对象类型 97 | * @param id 98 | * @return Object 99 | */ 100 | public T get(Class c, Serializable id); 101 | 102 | /** 103 | * 获得一个对象 104 | * 105 | * @param hql 106 | * @param param 107 | * @return Object 108 | */ 109 | public T get(String hql, Object[] param); 110 | 111 | /** 112 | * 获得一个对象 113 | * 114 | * @param hql 115 | * @param param 116 | * @return 117 | */ 118 | public T get(String hql, List param); 119 | 120 | /** 121 | * select count(*) from 类 122 | * 123 | * @param hql 124 | * @return 125 | */ 126 | public Long count(String hql); 127 | 128 | /** 129 | * select count(*) from 类 130 | * 131 | * @param hql 132 | * @param param 133 | * @return 134 | */ 135 | public Long count(String hql, Object[] param); 136 | 137 | /** 138 | * select count(*) from 类 139 | * 140 | * @param hql 141 | * @param param 142 | * @return 143 | */ 144 | public Long count(String hql, List param); 145 | 146 | /** 147 | * 执行HQL语句 148 | * 149 | * @param hql 150 | * @return 响应数目 151 | */ 152 | public Integer executeHql(String hql); 153 | 154 | /** 155 | * 执行HQL语句 156 | * 157 | * @param hql 158 | * @param param 159 | * @return 响应数目 160 | */ 161 | public Integer executeHql(String hql, Object[] param); 162 | 163 | /** 164 | * 执行HQL语句 165 | * 166 | * @param hql 167 | * @param param 168 | * @return 169 | */ 170 | public Integer executeHql(String hql, List param); 171 | 172 | 173 | JdbcTemplate getJdbcTemplate(); 174 | } 175 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/dao/impl/BaseDaoImpl.java: -------------------------------------------------------------------------------- 1 | package com.university.common.dao.impl; 2 | 3 | 4 | import com.university.common.dao.BaseDao; 5 | import org.hibernate.Query; 6 | import org.hibernate.Session; 7 | import org.hibernate.SessionFactory; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.jdbc.core.JdbcTemplate; 10 | import org.springframework.stereotype.Component; 11 | 12 | import javax.annotation.Resource; 13 | import java.io.Serializable; 14 | import java.util.List; 15 | 16 | @Component("baseDao") 17 | @SuppressWarnings("all") 18 | public class BaseDaoImpl implements BaseDao { 19 | @Autowired 20 | private SessionFactory sessionFactory; 21 | 22 | @Resource 23 | private JdbcTemplate jdbcTemplate; 24 | 25 | @Override 26 | public JdbcTemplate getJdbcTemplate() { 27 | return jdbcTemplate; 28 | } 29 | 30 | public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 31 | this.jdbcTemplate = jdbcTemplate; 32 | } 33 | 34 | @Autowired 35 | public void setSessionFactory(SessionFactory sessionFactory) { 36 | this.sessionFactory = sessionFactory; 37 | } 38 | 39 | public SessionFactory getSessionFactory() { 40 | return sessionFactory; 41 | } 42 | 43 | public Session getSession() { 44 | return sessionFactory.getCurrentSession(); 45 | } 46 | 47 | private Session getCurrentSession() { 48 | return sessionFactory.getCurrentSession(); 49 | } 50 | 51 | public Serializable save(T o) { 52 | return this.getCurrentSession().save(o); 53 | } 54 | 55 | public void delete(T o) { 56 | this.getCurrentSession().delete(o); 57 | } 58 | 59 | public void update(T o) { 60 | this.getCurrentSession().update(o); 61 | } 62 | 63 | public void saveOrUpdate(T o) { 64 | this.getCurrentSession().saveOrUpdate(o); 65 | } 66 | 67 | public List find(String hql) { 68 | return this.getCurrentSession().createQuery(hql).list(); 69 | } 70 | 71 | public List find(String hql, Object[] param) { 72 | Query q = this.getCurrentSession().createQuery(hql); 73 | if (param != null && param.length > 0) { 74 | for (int i = 0; i < param.length; i++) { 75 | q.setParameter(i, param[i]); 76 | } 77 | } 78 | return q.list(); 79 | } 80 | 81 | public List find(String hql, List param) { 82 | Query q = this.getCurrentSession().createQuery(hql); 83 | if (param != null && param.size() > 0) { 84 | for (int i = 0; i < param.size(); i++) { 85 | q.setParameter(i, param.get(i)); 86 | } 87 | } 88 | return q.list(); 89 | } 90 | 91 | public List find(String hql, Object[] param, Integer page, Integer rows) { 92 | if (page == null || page < 1) { 93 | page = 1; 94 | } 95 | if (rows == null || rows < 1) { 96 | rows = 10; 97 | } 98 | Query q = this.getCurrentSession().createQuery(hql); 99 | if (param != null && param.length > 0) { 100 | for (int i = 0; i < param.length; i++) { 101 | q.setParameter(i, param[i]); 102 | } 103 | } 104 | return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); 105 | } 106 | 107 | public List find(String hql, List param, Integer page, Integer rows) { 108 | if (page == null || page < 1) { 109 | page = 1; 110 | } 111 | if (rows == null || rows < 1) { 112 | rows = 10; 113 | } 114 | Query q = this.getCurrentSession().createQuery(hql); 115 | if (param != null && param.size() > 0) { 116 | for (int i = 0; i < param.size(); i++) { 117 | q.setParameter(i, param.get(i)); 118 | } 119 | } 120 | return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); 121 | } 122 | 123 | public T get(Class c, Serializable id) { 124 | return (T) this.getCurrentSession().get(c, id); 125 | } 126 | 127 | public T get(String hql, Object[] param) { 128 | List l = this.find(hql, param); 129 | if (l != null && l.size() > 0) { 130 | return l.get(0); 131 | } else { 132 | return null; 133 | } 134 | } 135 | 136 | public T get(String hql, List param) { 137 | List l = this.find(hql, param); 138 | if (l != null && l.size() > 0) { 139 | return l.get(0); 140 | } else { 141 | return null; 142 | } 143 | } 144 | 145 | public Long count(String hql) { 146 | return (Long) this.getCurrentSession().createQuery(hql).uniqueResult(); 147 | } 148 | 149 | public Long count(String hql, Object[] param) { 150 | Query q = this.getCurrentSession().createQuery(hql); 151 | if (param != null && param.length > 0) { 152 | for (int i = 0; i < param.length; i++) { 153 | q.setParameter(i, param[i]); 154 | } 155 | } 156 | return (Long) q.uniqueResult(); 157 | } 158 | 159 | public Long count(String hql, List param) { 160 | Query q = this.getCurrentSession().createQuery(hql); 161 | if (param != null && param.size() > 0) { 162 | for (int i = 0; i < param.size(); i++) { 163 | q.setParameter(i, param.get(i)); 164 | } 165 | } 166 | return (Long) q.uniqueResult(); 167 | } 168 | 169 | public Integer executeHql(String hql) { 170 | return this.getCurrentSession().createQuery(hql).executeUpdate(); 171 | } 172 | 173 | public Integer executeHql(String hql, Object[] param) { 174 | Query q = this.getCurrentSession().createQuery(hql); 175 | if (param != null && param.length > 0) { 176 | for (int i = 0; i < param.length; i++) { 177 | q.setParameter(i, param[i]); 178 | } 179 | } 180 | return q.executeUpdate(); 181 | } 182 | 183 | public Integer executeHql(String hql, List param) { 184 | Query q = this.getCurrentSession().createQuery(hql); 185 | if (param != null && param.size() > 0) { 186 | for (int i = 0; i < param.size(); i++) { 187 | q.setParameter(i, param.get(i)); 188 | } 189 | } 190 | return q.executeUpdate(); 191 | } 192 | 193 | 194 | 195 | } 196 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/dto/JsonResponseResult.java: -------------------------------------------------------------------------------- 1 | package com.university.common.dto; 2 | 3 | 4 | 5 | public class JsonResponseResult { 6 | 7 | private Integer code; 8 | 9 | private String msg; 10 | 11 | private T response; 12 | 13 | public Integer getCode() { 14 | return code; 15 | } 16 | 17 | public JsonResponseResult setCode(Integer code) { 18 | this.code = code; 19 | return this; 20 | } 21 | 22 | public String getMsg() { 23 | return msg; 24 | } 25 | 26 | public JsonResponseResult setMsg(String msg) { 27 | this.msg = msg; 28 | return this; 29 | } 30 | 31 | public T getResponse() { 32 | return response; 33 | } 34 | 35 | public JsonResponseResult setResponse(T response) { 36 | this.response = response; 37 | return this; 38 | } 39 | 40 | public JsonResponseResult createSuccess() { 41 | return this.setCode(0).setMsg("success"); 42 | } 43 | 44 | public static JsonResponseResult Success() { 45 | return new JsonResponseResult().setCode(0).setMsg("success"); 46 | } 47 | 48 | public static JsonResponseResult Success(Object response) { 49 | return JsonResponseResult.Success().setResponse(response); 50 | } 51 | 52 | public static JsonResponseResult Error(Integer errorCode, String message) { 53 | return new JsonResponseResult().setCode(errorCode).setMsg(message); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/filter/SpringMVCSessionFilter.java: -------------------------------------------------------------------------------- 1 | package com.university.common.filter; 2 | 3 | import com.university.alumni.entity.User; 4 | import com.university.common.util.NoCheckUrlsUtils; 5 | import org.apache.log4j.Logger; 6 | import org.springframework.web.context.WebApplicationContext; 7 | import org.springframework.web.context.support.WebApplicationContextUtils; 8 | import org.springframework.web.filter.OncePerRequestFilter; 9 | 10 | import javax.servlet.FilterChain; 11 | import javax.servlet.FilterConfig; 12 | import javax.servlet.ServletException; 13 | import javax.servlet.http.HttpServletRequest; 14 | import javax.servlet.http.HttpServletResponse; 15 | import java.io.IOException; 16 | import java.io.PrintWriter; 17 | import java.util.ArrayList; 18 | import java.util.Date; 19 | import java.util.Enumeration; 20 | import java.util.List; 21 | 22 | 23 | 24 | /* 25 | public class SpringMVCSessionFilter extends OncePerRequestFilter { 26 | 27 | // 未登录跳转页面 28 | private String redirectURL; 29 | 30 | // 不登陆可访问URL列表 31 | private List noCheckUrlList; 32 | 33 | // 用户在session中存储的key值 34 | private String checkSessionKey; 35 | 36 | // 日志 37 | Logger logger = Logger.getLogger(SpringMVCSessionFilter.class); 38 | 39 | 40 | 41 | */ 42 | /*@Override 43 | protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) 44 | throws ServletException, IOException { 45 | 46 | FilterConfig filterConfig = this.getFilterConfig(); 47 | 48 | redirectURL = filterConfig.getInitParameter("redirectURL"); 49 | checkSessionKey = filterConfig.getInitParameter("checkSessionKey"); 50 | String noCheckUrlStr = filterConfig.getInitParameter("noCheckUrl"); 51 | String moduleName = filterConfig.getInitParameter("moduleName"); 52 | String defaultRedirctUrl = ""; 53 | 54 | if("admin".equals(moduleName)){ 55 | noCheckUrlStr = NoCheckUrlsUtils.GenerateAdminNoCheckUrls(); 56 | defaultRedirctUrl = "/user/userListPage.do"; 57 | }else if ("client".equals(moduleName)){ 58 | noCheckUrlStr = NoCheckUrlsUtils.GenerateClientNoCheckUrls(); 59 | defaultRedirctUrl = "/match/commonMatchEventPage.do?matchType=1"; 60 | }else if ("race".equals(moduleName)){ 61 | noCheckUrlStr = NoCheckUrlsUtils.GenerateRaceNoCheckUrls(); 62 | defaultRedirctUrl = "/index.jsp"; 63 | } 64 | 65 | // 组装不登陆可访问URL列表 66 | if (noCheckUrlList == null || noCheckUrlList.size() == 0) { 67 | noCheckUrlList = new ArrayList(); 68 | if (noCheckUrlStr != null && !"".equals(noCheckUrlStr.trim()) ) { 69 | // 去除空格 70 | noCheckUrlStr = noCheckUrlStr.replaceAll(" ",""); 71 | // 分割为数组 72 | String[] noCheckUrls = noCheckUrlStr.split(";"); 73 | // 组装 74 | if(noCheckUrls != null && noCheckUrls.length > 0){ 75 | for(int i = 0; i < noCheckUrls.length; i++){ 76 | noCheckUrlList.add(noCheckUrls[i]); 77 | } 78 | } 79 | } 80 | } 81 | 82 | String uri = request.getRequestURI(); 83 | 84 | //logger.info("uri = "+uri); 85 | Enumeration params = request.getParameterNames(); 86 | String paramsStr = ""; 87 | 88 | // 从session中获取登录者实体 89 | User userModelTemp = (User) request.getSession().getAttribute(checkSessionKey); 90 | if (userModelTemp != null) { 91 | //paramsStr = paramsStr + "[peopleId = "+userModelTemp.getId()+",mobile = "+userModelTemp.getMobile()+"]"; 92 | } 93 | 94 | while (params.hasMoreElements()){ 95 | String paramName = String.valueOf(params.nextElement()); 96 | String paramValue = request.getParameter(paramName); 97 | //logger.info(paramName + " = " +paramValue); 98 | paramsStr = paramsStr + "&" + paramName + "=" + paramValue; 99 | } 100 | paramsStr = paramsStr.replaceFirst("&","?"); 101 | 102 | if(!uri.equals("/server/alive.do")){ 103 | logger.info(uri+paramsStr); 104 | } 105 | 106 | 107 | //System.out.println(""); 108 | 109 | if("/".equals(uri)||"".equals(uri)){ 110 | uri = request.getContextPath() + defaultRedirctUrl; 111 | response.sendRedirect(uri); 112 | return; 113 | } 114 | 115 | // 检查URI是否是不需登陆的URI 116 | boolean bl = isNoCheckRequestUri(uri); 117 | 118 | 119 | WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); 120 | UserService userService = (UserService) webApplicationContext.getBean("userService"); 121 | 122 | RedisDao redisDao = (RedisDao) webApplicationContext.getBean("redisDao"); 123 | 124 | //appToken 125 | String authToken = request.getHeader("Authorization"); 126 | 127 | if(authToken!=null && !"".equals(authToken.trim())){ 128 | logger.info("authToken = "+authToken); 129 | AppToken appToken = userService.getAppTokenByToken(authToken); 130 | if(appToken != null){ 131 | request.getSession().setAttribute(checkSessionKey,null); 132 | Date now = new Date(); 133 | if(now.getTime() < appToken.getFailureTime().getTime()){ 134 | UserModel userModel = userService.loadUserModelAll(appToken.getUserId()); 135 | request.getSession().setAttribute(checkSessionKey, userModel); 136 | } 137 | } 138 | } 139 | //appToken 140 | 141 | 142 | if (bl) { 143 | // 不执行过滤,继续 144 | filterChain.doFilter(request, response); 145 | }else{ 146 | 147 | 148 | 149 | 150 | // 从session中获取登录者实体 151 | UserModel userModel = (UserModel) request.getSession().getAttribute(checkSessionKey); 152 | if (userModel == null) { 153 | if(authToken!=null && !"".equals(authToken.trim())){ 154 | JsonResponseResult result = new JsonResponseResult(); 155 | result.setCode(999); 156 | result.setMsg("用户超时"); 157 | String resultJson = BaseUtils.toJsonFromObject(result); 158 | 159 | response.setCharacterEncoding("UTF-8"); 160 | response.setContentType("text/html"); 161 | PrintWriter out = response.getWriter(); 162 | out.print(resultJson); 163 | out.flush(); 164 | out.close(); 165 | }else{ 166 | String redirectUri = request.getContextPath() + redirectURL; 167 | response.sendRedirect(redirectUri); 168 | return; 169 | } 170 | } else { 171 | 172 | // 判断多终端登陆 173 | 174 | 175 | ServletContext servletContext = request.getSession().getServletContext(); 176 | Map loginMap = new HashMap(); 177 | loginMap = (Map) servletContext.getAttribute("loginMap"); 178 | if(loginMap!=null){ 179 | String sessionId = String.valueOf(loginMap.get(userModel.getId())); 180 | String currentSessionId = request.getSession().getId(); 181 | if(!currentSessionId.equals(sessionId)&&(authToken==null || "".equals(authToken.trim()))){ 182 | String redirectUri = request.getContextPath() + redirectURL; 183 | response.sendRedirect(redirectUri); 184 | return; 185 | } 186 | } 187 | 188 | 189 | 190 | 191 | 192 | LoginMap loginMap = redisDao.getLoginMap(); 193 | if(loginMap!=null){ 194 | String sessionId = String.valueOf(loginMap.getLoginMap().get(userModel.getId())); 195 | String currentSessionId = request.getSession().getId(); 196 | if(!currentSessionId.equals(sessionId)&&(authToken==null || "".equals(authToken.trim()))){ 197 | String redirectUri = request.getContextPath() + redirectURL; 198 | response.sendRedirect(redirectUri); 199 | return; 200 | } 201 | } 202 | 203 | 204 | 205 | String currentSessionId = request.getSession().getId(); 206 | String userSessionId = redisDao.getLoginSessionId(userModel.getId()); 207 | 208 | if(userSessionId!=null && !"".equals(userSessionId.trim())){ 209 | if( !userSessionId.equals(currentSessionId) &&(authToken==null || "".equals(authToken.trim())) ){ 210 | String redirectUri = request.getContextPath() + redirectURL; 211 | response.sendRedirect(redirectUri); 212 | return; 213 | } 214 | } 215 | 216 | // 权限控制 217 | List functionModels = userModel.getRoleModel().getFunctionModels(); 218 | // 是否有权限 219 | boolean auth = false; 220 | if(functionModels != null && functionModels.size() > 0){ 221 | for(int i = 0; i < functionModels.size(); i++){ 222 | if(functionModels.get(i) != null) { 223 | String functionUri = functionModels.get(i).getUri(); 224 | if (functionUri != null) { 225 | if (uri.indexOf(functionUri) >= 0) { 226 | auth = true; 227 | break; 228 | } 229 | } 230 | } 231 | } 232 | } 233 | 234 | //测试 235 | auth = true; 236 | 237 | if(auth){ 238 | // 如果有权限访问,继续 239 | filterChain.doFilter(request, response); 240 | 241 | }else{ 242 | 243 | JsonResponseResult result = new JsonResponseResult(); 244 | result.setCode(1); 245 | result.setMsg("权限不足!"); 246 | String resultJson = BaseUtils.toJsonFromObject(result); 247 | 248 | response.setCharacterEncoding("UTF-8"); 249 | response.setContentType("text/html"); 250 | PrintWriter out = response.getWriter(); 251 | out.print(resultJson); 252 | out.flush(); 253 | out.close(); 254 | 255 | } 256 | 257 | } 258 | 259 | } 260 | } 261 | *//* 262 | 263 | // 是否是不需登陆的URI 264 | private boolean isNoCheckRequestUri(String uri) { 265 | boolean result = false; 266 | if(noCheckUrlList != null && noCheckUrlList.size() > 0 && uri != null && !"".equals(uri.trim())){ 267 | for(int i = 0; i < noCheckUrlList.size(); i++){ 268 | String noCheckUrl = noCheckUrlList.get(i); 269 | if(noCheckUrl != null){ 270 | if(uri.indexOf(noCheckUrl) >= 0){ 271 | result = true; 272 | break; 273 | } 274 | } 275 | } 276 | } 277 | return result; 278 | } 279 | } 280 | */ 281 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/util/BaseUtils.java: -------------------------------------------------------------------------------- 1 | package com.university.common.util; 2 | 3 | import net.sf.json.JSONArray; 4 | import net.sf.json.JSONObject; 5 | 6 | import java.text.ParseException; 7 | import java.text.SimpleDateFormat; 8 | import java.util.Date; 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | import java.util.regex.Matcher; 12 | import java.util.regex.Pattern; 13 | 14 | /** 15 | * Created by songrenfei on 16/7/15. 16 | */ 17 | public class BaseUtils { 18 | 19 | // 验证手机号 ok 20 | public static boolean isMobile(String str) { 21 | boolean bl = false; 22 | if (str==null || "".equals(str.trim()) || str.length()!=11){ 23 | return bl; 24 | } 25 | Pattern p = Pattern.compile("^[1][0-9]{10}$"); 26 | Matcher m = p.matcher(str); 27 | bl = m.matches(); 28 | return bl; 29 | } 30 | 31 | // 验证邮箱 ok 32 | public static boolean isEmail(String email){ 33 | boolean bl = false; 34 | if (email==null || "".equals(email.trim())){ 35 | return bl; 36 | } 37 | Pattern p = Pattern.compile("[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?"); 38 | Matcher m = p.matcher(email); 39 | bl = m.matches(); 40 | return bl; 41 | } 42 | 43 | //转json ok 44 | public static String toJsonFromArray(Object obj){ 45 | if(obj!=null){ 46 | return JSONArray.fromObject(obj).toString(); 47 | }else{ 48 | return ""; 49 | } 50 | 51 | } 52 | 53 | //转json ok 54 | public static String toJsonFromObject(Object obj){ 55 | if(obj!=null){ 56 | return JSONObject.fromObject(obj).toString(); 57 | }else{ 58 | return ""; 59 | } 60 | 61 | } 62 | 63 | 64 | public static Date formatDateStr(String dateStr){ 65 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 66 | Date date = null; 67 | 68 | if(dateStr != null && !"".equals(dateStr.trim())){ 69 | try { 70 | date = sdf.parse(dateStr); 71 | } catch (ParseException e) { 72 | e.printStackTrace(); 73 | } 74 | } 75 | 76 | return date; 77 | } 78 | 79 | public static String formatDateToStr(Date date){ 80 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 81 | String dateStr = ""; 82 | 83 | if(date != null){ 84 | try { 85 | dateStr = sdf.format(date); 86 | } catch (Exception e) { 87 | e.printStackTrace(); 88 | } 89 | } 90 | 91 | return dateStr; 92 | } 93 | 94 | public static void main(String[] args){ 95 | boolean bl = BaseUtils.isMobile("18811211318"); 96 | System.out.println(bl); 97 | 98 | Map map = new HashMap(); 99 | map.put("a",1); 100 | map.put("b",2); 101 | map.put("c",3); 102 | System.out.println(BaseUtils.toJsonFromArray(map)); 103 | 104 | boolean bl_email = BaseUtils.isEmail("songrf@1."); 105 | System.out.println("bl_email = "+bl_email); 106 | 107 | System.out.println(BaseUtils.formatDateStr("2016-08-12 ***16:25:00").toLocaleString()); 108 | System.out.println(BaseUtils.formatDateStr("2016-08-12 16:25:00").toGMTString()); 109 | System.out.println(BaseUtils.formatDateStr("2016-08-12 16:25:00").getTime()); 110 | } 111 | 112 | //效验是否是纯数字 113 | public static boolean checkNumber(String number) { 114 | String result =""; 115 | 116 | boolean bl = number.matches("[0-9]+"); 117 | if (bl == true) { 118 | result="该字符串是纯数字"; 119 | } else { 120 | result="该字符串不是纯数字"; 121 | } 122 | return bl; 123 | 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/util/CaptchaUtils.java: -------------------------------------------------------------------------------- 1 | package com.university.common.util; 2 | 3 | import org.patchca.background.BackgroundFactory; 4 | import org.patchca.color.ColorFactory; 5 | import org.patchca.filter.predefined.*; 6 | import org.patchca.font.RandomFontFactory; 7 | import org.patchca.service.ConfigurableCaptchaService; 8 | import org.patchca.text.renderer.BestFitTextRenderer; 9 | import org.patchca.utils.encoder.EncoderHelper; 10 | import org.patchca.word.RandomWordFactory; 11 | 12 | import java.awt.*; 13 | import java.awt.image.BufferedImage; 14 | import java.io.File; 15 | import java.io.FileNotFoundException; 16 | import java.io.FileOutputStream; 17 | import java.io.OutputStream; 18 | import java.util.Random; 19 | 20 | /** 21 | * Created by songrenfei on 16/7/18. 22 | */ 23 | public class CaptchaUtils { 24 | 25 | private Random random = new Random(); 26 | 27 | public static void main(String[] args) throws FileNotFoundException { 28 | CaptchaUtils captchaUtils = new CaptchaUtils(); 29 | 30 | File file = new File("/Users/songrenfei/Documents/temp/captcha.png"); 31 | FileOutputStream fos = new FileOutputStream(file); 32 | captchaUtils.createCaptcha(fos); 33 | } 34 | 35 | 36 | 37 | // ok 38 | public String createCaptcha(OutputStream os){ 39 | String token = ""; 40 | ConfigurableCaptchaService cs = new ConfigurableCaptchaService(); 41 | this.init(cs); 42 | Integer ra = random.nextInt(5); 43 | ra = 3; 44 | switch (ra) { 45 | case 0: 46 | cs.setFilterFactory(new CurvesRippleFilterFactory(cs.getColorFactory())); 47 | break; 48 | case 1: 49 | cs.setFilterFactory(new MarbleRippleFilterFactory()); 50 | break; 51 | case 2: 52 | cs.setFilterFactory(new DoubleRippleFilterFactory()); 53 | break; 54 | case 3: 55 | cs.setFilterFactory(new WobbleRippleFilterFactory()); 56 | break; 57 | case 4: 58 | cs.setFilterFactory(new DiffuseRippleFilterFactory()); 59 | break; 60 | } 61 | 62 | try { 63 | 64 | token = EncoderHelper.getChallangeAndWriteImage(cs, "png", os); 65 | 66 | } catch (Exception e) { 67 | e.printStackTrace(); 68 | } 69 | 70 | return token; 71 | } 72 | 73 | // ok 74 | private void init(ConfigurableCaptchaService cs){ 75 | 76 | MyColorFactory myColorFactory = new MyColorFactory(); 77 | cs.setColorFactory(myColorFactory); 78 | 79 | RandomFontFactory fontFactory = new RandomFontFactory(); 80 | fontFactory.setMaxSize(32); 81 | fontFactory.setMinSize(28); 82 | cs.setFontFactory(fontFactory); 83 | 84 | // 测试 暂时去掉背景干扰 85 | //MyCustomBackgroundFactory backgroundFactory = new MyCustomBackgroundFactory(); 86 | //cs.setBackgroundFactory(backgroundFactory); 87 | 88 | BestFitTextRenderer textRenderer = new BestFitTextRenderer(); 89 | textRenderer.setBottomMargin(3); 90 | textRenderer.setTopMargin(3); 91 | cs.setTextRenderer(textRenderer); 92 | 93 | RandomWordFactory wf = new RandomWordFactory(); 94 | wf.setCharacters("23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ"); 95 | wf.setMaxLength(6); 96 | wf.setMinLength(4); 97 | cs.setWordFactory(wf); 98 | 99 | cs.setWidth(102); 100 | cs.setHeight(32); 101 | } 102 | 103 | // ok 104 | private class MyColorFactory implements ColorFactory { 105 | 106 | @Override 107 | public Color getColor(int x) { 108 | int[] c = new int[3]; 109 | int i = random.nextInt(c.length); 110 | for (int fi = 0; fi < c.length; fi++) { 111 | if (fi == i) { 112 | c[fi] = random.nextInt(71); 113 | } else { 114 | c[fi] = random.nextInt(256); 115 | } 116 | } 117 | return new Color(c[0], c[1], c[2]); 118 | } 119 | } 120 | 121 | 122 | // 自定义验证码图片背景,主要画一些噪点和干扰线 ok 123 | private class MyCustomBackgroundFactory implements BackgroundFactory { 124 | 125 | @Override 126 | public void fillBackground(BufferedImage bufferedImage) { 127 | Graphics graphics = bufferedImage.getGraphics(); 128 | 129 | // 验证码图片的宽高 130 | int imgWidth = bufferedImage.getWidth(); 131 | int imgHeight = bufferedImage.getHeight(); 132 | 133 | // 填充为白色背景 134 | graphics.setColor(Color.WHITE); 135 | graphics.fillRect(0, 0, imgWidth, imgHeight); 136 | 137 | // 画100个噪点(颜色及位置随机) 138 | for(int i = 0; i < 100; i++) { 139 | // 随机颜色 140 | int rInt = random.nextInt(255); 141 | int gInt = random.nextInt(255); 142 | int bInt = random.nextInt(255); 143 | 144 | graphics.setColor(new Color(rInt, gInt, bInt)); 145 | 146 | // 随机位置 147 | int xInt = random.nextInt(imgWidth - 3); 148 | int yInt = random.nextInt(imgHeight - 2); 149 | 150 | // 随机旋转角度 151 | int sAngleInt = random.nextInt(360); 152 | int eAngleInt = random.nextInt(360); 153 | 154 | // 随机大小 155 | int wInt = random.nextInt(6); 156 | int hInt = random.nextInt(6); 157 | 158 | graphics.fillArc(xInt, yInt, wInt, hInt, sAngleInt, eAngleInt); 159 | 160 | // 画5条干扰线 161 | if (i % 20 == 0) { 162 | int xInt2 = random.nextInt(imgWidth); 163 | int yInt2 = random.nextInt(imgHeight); 164 | graphics.drawLine(xInt, yInt, xInt2, yInt2); 165 | } 166 | } 167 | } 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/util/NoCheckUrlsUtils.java: -------------------------------------------------------------------------------- 1 | package com.university.common.util; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * Created by songrenfei on 16/8/13. 7 | */ 8 | public class NoCheckUrlsUtils { 9 | 10 | /** 11 | * admin 12 | */ 13 | public static String GenerateAdminNoCheckUrls(){ 14 | String noCheckUrls = ""; 15 | ArrayList list = new ArrayList<>(); 16 | list.add("/user/login.do"); //打开登录页面 17 | list.add("/user/createCaptcha.do"); //生成验证码 18 | list.add("/user/checkCaptcha.do"); //验证图形验证码 19 | list.add("/user/sendMobileCode.do"); //发送手机验证码 20 | list.add("/user/loginIn.do"); //登陆(带图形验证码) 21 | list.add("/user/findPassword.do"); //忘记密码重置密码 22 | 23 | list.add("/match/setTakeTime.do"); //计算选手比赛用时 24 | list.add("/match/setRanking.do"); //计算选手比赛排名 25 | 26 | list.add("/test/template.do"); //测试 27 | list.add("/server/alive.do"); //测试服务器是否正常运行 28 | 29 | noCheckUrls = NoCheckUrlsUtils.arrayToString(list); 30 | 31 | return noCheckUrls; 32 | } 33 | 34 | /** 35 | * client 36 | */ 37 | public static String GenerateClientNoCheckUrls(){ 38 | String noCheckUrls = ""; 39 | ArrayList list = new ArrayList<>(); 40 | list.add("/user/clientRegisterUserPage.do"); //用户注册页面-[pc] 41 | list.add("/user/register.do"); //用户注册-[pc] 42 | list.add("/user/login.do"); //登录页面-[pc] 43 | list.add("/user/sendMobileCode.do"); //发送手机验证码-[app|pc] 44 | list.add("/user/createUser.do"); //创建用户-[app|pc] 45 | list.add("/user/createCaptcha.do"); //生成验证码-[pc] 46 | list.add("/user/checkCaptcha.do"); //验证图形验证码-[pc] 47 | list.add("/user/baseLoginIn.do"); //基础登陆(无图形验证码)-[app] 48 | list.add("/user/loginIn.do"); //登陆(带图形验证码)-[pc] 49 | list.add("/user/findPassword.do"); //忘记密码重置密码-[app|pc] 50 | list.add("/user/clientFindPasswordPage.do"); //忘记密码重置密码页面-[pc] 51 | list.add("/user/protocolPage.do"); //用户服务协议-[pc] 52 | 53 | list.add("/match/getCasinoEventListPageByMatchTypeForClient.do"); //获取比赛列表(前台-体验赛) 54 | 55 | list.add("/userService/checkUserToken.do"); //考试系统验证token-[app|pc] 56 | 57 | list.add("/test/template.do"); //测试 58 | list.add("/server/alive.do"); //测试服务器是否正常运行 59 | //list.add("/check/createCheckToken.do"); //创建token 60 | list.add("/phone/phone.do"); //下载app 61 | 62 | noCheckUrls = NoCheckUrlsUtils.arrayToString(list); 63 | 64 | return noCheckUrls; 65 | } 66 | 67 | /** 68 | * race 69 | */ 70 | public static String GenerateRaceNoCheckUrls(){ 71 | String noCheckUrls = ""; 72 | ArrayList list = new ArrayList<>(); 73 | list.add("/user/login.do"); //打开登录页面 74 | list.add("/matchService/checkUser.do"); //检查用户名和密码是否合法 75 | list.add("/matchService/checkToken.do"); //检查token是否合法返回people_id 76 | list.add("/matchService/getPeopleInfo.do"); //获取用户信息 77 | 78 | list.add("/test/template.do"); //测试 79 | list.add("/server/alive.do"); //测试服务器是否正常运行 80 | 81 | noCheckUrls = NoCheckUrlsUtils.arrayToString(list); 82 | 83 | return noCheckUrls; 84 | } 85 | 86 | public static String arrayToString(ArrayList list){ 87 | String str = ""; 88 | if(list!=null && list.size()>0){ 89 | for (int i = 0; i < list.size(); i++){ 90 | if(i==0){ 91 | str = str + list.get(i); 92 | }else{ 93 | str = str + ";" + list.get(i); 94 | } 95 | } 96 | } 97 | return str; 98 | } 99 | 100 | public static void main(String[] args){ 101 | System.out.println(NoCheckUrlsUtils.GenerateAdminNoCheckUrls()); 102 | System.out.println(NoCheckUrlsUtils.GenerateClientNoCheckUrls()); 103 | System.out.println(NoCheckUrlsUtils.GenerateRaceNoCheckUrls()); 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/util/SHA256.java: -------------------------------------------------------------------------------- 1 | package com.university.common.util; 2 | import java.security.MessageDigest; 3 | 4 | 5 | public class SHA256 { 6 | public static String encrypt(String str) 7 | { 8 | String result=""; 9 | try 10 | { 11 | MessageDigest md = MessageDigest.getInstance("SHA-256"); 12 | md.update(str.getBytes("GBK")); 13 | 14 | for(byte b:md.digest()) 15 | { 16 | result=result+b; 17 | } 18 | } 19 | catch (Exception e) 20 | { 21 | e.printStackTrace(); 22 | } 23 | return result; 24 | } 25 | public static void main(String[] args) { 26 | System.out.println(encrypt("imsa@W#E$R%T")); 27 | } 28 | } -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/velocity/tools/JsonTool.java: -------------------------------------------------------------------------------- 1 | /* 2 | * See the NOTICE file distributed with this work for additional 3 | * information regarding copyright ownership. 4 | * 5 | * This is free software; you can redistribute it and/or modify it 6 | * under the terms of the GNU Lesser General Public License as 7 | * published by the Free Software Foundation; either version 2.1 of 8 | * the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this software; if not, write to the Free 17 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 18 | * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 19 | */ 20 | package com.university.common.velocity.tools; 21 | 22 | import net.sf.json.JSON; 23 | import net.sf.json.JSONArray; 24 | import net.sf.json.JSONNull; 25 | import net.sf.json.JSONObject; 26 | import net.sf.json.util.JSONUtils; 27 | 28 | /** 29 | * Velocity tool to facilitate serialization of Java objects to the JSON format. 30 | * 31 | * @version $Id$ 32 | * @since 4.0M2 33 | */ 34 | public class JsonTool { 35 | /** 36 | * Serialize a Java object to the JSON format. 37 | *

38 | * Examples: 39 | *

    40 | *
  • numbers and boolean values: 23, 13.5, true, false
  • 41 | *
  • strings: "one\"two'three" (quotes included)
  • 42 | *
  • arrays and collections: [1, 2, 3]
  • 43 | *
  • maps: {"number": 23, "boolean": false, "string": "value"}
  • 44 | *
  • beans: {"enabled": true, "name": "XWiki"} for a bean that has #isEnabled() and #getName() getters
  • 45 | *
46 | * 47 | * @param object the object to be serialized to the JSON format 48 | * @return the JSON-verified string representation of the given object 49 | */ 50 | public String serialize(Object object) { 51 | JSON json = null; 52 | if (object == null) { 53 | json = JSONNull.getInstance(); 54 | } else if (object instanceof String) { 55 | return JSONUtils.valueToString(object); 56 | } else if (JSONUtils.isBoolean(object)) { 57 | return object.toString(); 58 | } else if (JSONUtils.isNumber(object)) { 59 | return JSONUtils.numberToString((Number) object); 60 | } else if (JSONUtils.isArray(object)) { 61 | json = JSONArray.fromObject(object); 62 | } else { 63 | json = JSONObject.fromObject(object); 64 | } 65 | 66 | return json.toString(); 67 | } 68 | } -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/velocity/tools/StaticFileTool.java: -------------------------------------------------------------------------------- 1 | package com.university.common.velocity.tools; 2 | 3 | import org.apache.velocity.tools.generic.LocaleConfig; 4 | import org.apache.velocity.tools.generic.ValueParser; 5 | 6 | import java.net.MalformedURLException; 7 | 8 | /** 9 | * Created by songrenfei on 2016/12/14. 10 | */ 11 | public class StaticFileTool extends LocaleConfig { 12 | 13 | public static final String DEFAULT_BASE_URL = ""; 14 | 15 | private String baseUrl; 16 | 17 | public String getBaseUrl() { 18 | return baseUrl; 19 | } 20 | 21 | protected void setBaseUrl(String baseUrl) { 22 | this.baseUrl = baseUrl; 23 | } 24 | 25 | protected void configure(ValueParser values) { 26 | super.configure(values); 27 | String baseUrl = values.getString("baseUrl"); 28 | if (baseUrl != null) { 29 | this.setBaseUrl(baseUrl); 30 | } else { 31 | this.setBaseUrl(DEFAULT_BASE_URL); 32 | } 33 | } 34 | 35 | public String url() { 36 | return this.getBaseUrl(); 37 | } 38 | 39 | public String url(String relativeUrl) throws MalformedURLException { 40 | //String baseUrl = this.getBaseUrl(); 41 | //Path url = Paths.get(baseUrl, relativeUrl); 42 | 43 | //System.out.println(baseUrl+relativeUrl); 44 | return baseUrl+relativeUrl; 45 | 46 | 47 | // prod 48 | //return "http://s.imsa.cn/wzh/static"+relativeUrl; 49 | 50 | 51 | // dev 52 | //return "/static"+relativeUrl; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /core/src/main/java/com/university/common/velocity/tools/UploadFileTool.java: -------------------------------------------------------------------------------- 1 | package com.university.common.velocity.tools; 2 | 3 | import org.apache.velocity.tools.generic.LocaleConfig; 4 | import org.apache.velocity.tools.generic.ValueParser; 5 | 6 | import java.net.MalformedURLException; 7 | import java.nio.file.Path; 8 | import java.nio.file.Paths; 9 | 10 | /** 11 | * Created by luxin on 16/7/20. 12 | */ 13 | public class UploadFileTool extends LocaleConfig { 14 | 15 | public static final String DEFAULT_BASE_URL = ""; 16 | 17 | private String baseUrl; 18 | 19 | public String getBaseUrl() { 20 | return baseUrl; 21 | } 22 | 23 | protected void setBaseUrl(String baseUrl) { 24 | this.baseUrl = baseUrl; 25 | } 26 | 27 | protected void configure(ValueParser values) { 28 | super.configure(values); 29 | String baseUrl = values.getString("baseUrl"); 30 | if (baseUrl != null) { 31 | this.setBaseUrl(baseUrl); 32 | } else { 33 | this.setBaseUrl(DEFAULT_BASE_URL); 34 | } 35 | } 36 | 37 | public String url() { 38 | return this.getBaseUrl(); 39 | } 40 | 41 | public String url(String relativeUrl) throws MalformedURLException { 42 | String baseUrl = this.getBaseUrl(); 43 | Path url = Paths.get(baseUrl, relativeUrl); 44 | return url.toString(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.university 8 | alumni 9 | pom 10 | 1.0-SNAPSHOT 11 | 12 | 13 | 4.2.2.RELEASE 14 | 4.3.6.Final 15 | 2.6.3 16 | 1.8 17 | 1.8 18 | ${project.basedir} 19 | 20 | 21 | 22 | 23 | admin 24 | client 25 | core 26 | 27 | 28 | 29 | --------------------------------------------------------------------------------