基于springboot + vue 大学生社团管理系统

目录

一、系统包含的技术

二、模块设计思路

三、项目运行截图​

四、项目代码分析

五、项目优化升级

六、结语

一、系统包含的技术:

后端:ssm + springboot
前端:vue + ElementUI
开发工具:IDEA  WebStorm
数据库:MySQL
JDK版本:jdk1.8+

二、模块设计思路

欢迎页面、社团类型管理、社团信息管理、用户信息管理、留言管理、入团申请管理、社团活动管理、社团成员管理、社团费用管理

欢迎页面

 

社团类型管理:

社团信息管理

用户信息管理

留言管理:

三、项目运行截图

入团申请管理

 

社团活动管理:

社团成员管理:

 

社团费用管理:

 

四、项目代码分析

JWT:

package com.cys.jwt;
import com.cys.model.UserInfo;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
public class JwtUtil {

    //过期时间设置
    public static final long EXPIRE = 1000 * 60 * 30 ;//30分钟
    //生成密码
    public static final String APP_SECRET = "kappy";

    /**
     * 生成token 方法
     * @param user
     * @return
     */
    public static String getJwtToken(UserInfo user){
        String JwtToken = Jwts.builder()
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
                .claim("username", user.getUsername())
                .claim("type", user.getType())
                .claim("id", user.getId())
                .signWith(SignatureAlgorithm.HS256, APP_SECRET)
                .compact();
        return JwtToken;
    }
    /**
     * 判断token是否存在与有效
     * @param jwtToken
     * @return
     */
    public static boolean checkToken(String jwtToken) {
        if(StringUtils.isEmpty(jwtToken)) return false;
        try {
            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    /**
     * 判断token是否存在与有效
     * @param request
     * @return
     */
    public static boolean checkToken(HttpServletRequest request) {
        try {
            String jwtToken = request.getHeader("token");
            if(StringUtils.isEmpty(jwtToken)) return false;
            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 获取用户id
     */
    public static Integer getUserId(String token){
        Jws<Claims> claimsJws =
                Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (Integer) claims.get("id");
    }

    /**
     * 获取用户type
     */
    public static Integer getUserType(String token){
        Jws<Claims> claimsJws =
                Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (Integer) claims.get("type");
    }

    /**
     * 根据token获取xm
     * @return
     */
    public static String getMemberIdByJwtToken(String token) {
//        String jwtToken = request.getHeader("token");
        Jws<Claims> claimsJws =
                Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("username");
    }




    public static void main(String[] args) {
        // 生成token
        UserInfo info=new UserInfo();
        info.setId(1);
        info.setType(1);    //代表管理员
        info.setUsername("admin");
        String token = getJwtToken(info);
        System.out.println(token);
//        String 
         //验证是否存在与有效
        boolean b = checkToken(token);
        System.out.println(b);

//        //获取对象 用户名信息
//       String username= getMemberIdByJwtToken(token);
//       System.out.println(username);


        Integer id= getUserId(token);
        System.out.println(id);
    }

}

社团活动管理:

@Api(tags = {"社团活动管理"})
@RestController
@RequestMapping("/activity")
public class ActivityController {

    private Logger log = LoggerFactory.getLogger(getClass());

    @Resource
    private IActivityService activityService;
    @Resource
    private ITeamService teamService;

    /**
     * 高级分页查询接口
     */
    @RequestMapping("/queryActivityInfoList")
    public JsonObject queryApplyInfoList(String name,
                                         String tel,
                                         @RequestParam(defaultValue = "1")int page,
                                         @RequestParam(defaultValue = "15")int limit,
                                         HttpServletRequest request){

        //通过header 获取token
        String token =  request.getHeader("token");
        //通过token获取角色类型和用户id
        Integer type = JwtUtil.getUserType(token);
        Integer userId = null;
        if (type==0){
            //如果是一个社团的管理员
            //获取当前用户据id
             userId = JwtUtil.getUserId(token);

        }

        //创建返回结果集对象
        JsonObject jsonObject=new JsonObject();
        PageInfo<Activity> PageInfo = activityService.queryList(page, limit, name,tel,userId);
        jsonObject.setCode(20000);
        jsonObject.setTotal(PageInfo.getTotal());
        jsonObject.setData(PageInfo.getList());
        return jsonObject;
    }

    @RequestMapping("/updateStatusById")
    public R updateStatusById(int id){
        int status=1;//默认只要审核就通过
        boolean b = activityService.updateStatus(status,id);
        if (b){
            return R.ok();
        }
        return R.fail("失败");
    }


    @ApiOperation(value = "新增社团活动管理")
    @RequestMapping("/addInfo")
    public R add(@RequestBody Activity activity,
                 HttpServletRequest request){
        //通过header 获取token
        String token = request.getHeader("token");
        //获取用户id
        Integer userId = JwtUtil.getUserId(token);
        //根据用户id 获取用户所在社团信息
        Team team = teamService.queryTeamInfoByUserId(userId);
        activity.setTeamId(team.getId());
        activity.setCreateTime(new Date());
        activity.setUserId(userId);
        activity.setStatus(0);

        int num= activityService.add(activity);
        if (num>0){
            return R.ok();
        }
        return R.fail("失败");
    }

    @ApiOperation(value = "删除社团活动管理")
    @RequestMapping("/deleteById")
    public R delete( Long id){
        int num= activityService.delete(id);
        if (num>0){
            return R.ok();
        }
        return R.fail("失败");
    }

    @ApiOperation(value = "更新社团活动管理")
    @RequestMapping("/updateInfo")
    public R update(@RequestBody Activity activity){

        int num= activityService.updateData(activity);
        if (num>0){
            return R.ok();
        }
        return R.fail("失败");
    }

    /**
     * ***********
     * 前端页面的接口方法
     */
    @RequestMapping("/findByTeamId")
    public Map findByTeamId(int id){
        Activity act = activityService.findByTeamId(id);
        Map map= new HashMap();
        map.put("code",20000);
        map.put("data",act);
        return map;


    }

}

跨域

package com.cys.cors;

import com.cys.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.rmi.registry.Registry;

@Configuration
public class CorsConfig implements WebMvcConfigurer {
//    @Override
//    public void addCorsMappings(CorsRegistry registry){
//        registry.addMapping("/**")
//                .allowCredentials(true)
//                .allowedOrigins("*")
//                .allowedMethods(new String[]{"GET","POST","PUT","DELETE"})
//                .allowedHeaders("*");
@Bean
public WebMvcConfigurer corsConfigs(){
    return new WebMvcConfigurer(){
        public void addCorsMappings(CorsRegistry registry){
            registry.addMapping("/**")
                    .allowedHeaders("*")
                    .allowedMethods("*")
//                         .allowCredentials(true)
                    .allowedOrigins("*")
                    .maxAge(3600L);
        }
    };
}
    private CorsConfiguration corsConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");  //允许所有域名访问
        corsConfiguration.addAllowedHeader("*");  //允许所有请求头
        corsConfiguration.addAllowedMethod("*");  //允许所有的请求类型
        corsConfiguration.setMaxAge(3600L);
        corsConfiguration.setAllowCredentials(true); //允许请求携带验证信息(cookie)
        return corsConfiguration;
    }

    /**
     * 注册拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration registration =
                registry.addInterceptor(new LoginInterceptor());
        //添加拦截内容
        registration.addPathPatterns("/**");
        //添加不拦截内容
        registration.excludePathPatterns("/users/loginIn",
                "users/queryuserInfo","team/queryTeamAll",
                "activity/findByTeamId");

    }
}

五、项目优化升级

开发建议: 尽量基于SpringBoot框架搭建项目,非常好用,还可以加消息队列

数据库设计: 参考已有的类似项目设计数据库,深入挖掘自己选题要解决什么问题,即设计什么数据表

后端:

java

spring(依赖注入框架,帮助你管理 Java 对象,集成一些其他的内容)

springmvc(web 框架,提供接口访问、restful接口等能力)

mybatis(Java 操作数据库的框架,持久层框架,对 jdbc 的封装)

mybatis-plus(对 mybatis 的增强,不用写 sql 也能实现增删改查)

springboot(快速启动 / 快速集成项目。不用自己管理 spring 配置,不用自己整合各种框架)

junit 单元测试库

mysql

部署:服务器 / 容器(平台)

六、结语

感谢大家的阅读,愿我们的未来一片光明。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Milestone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值