baseController中的一些封装

本文介绍了一个Java Web应用中控制器的设计与实现细节,包括请求响应管理、日期格式化、信息输出、路径获取等功能,并提供了用户会话管理、令牌生成及加密解密等实用工具方法。
protected static final Logger logger = Logger.getLogger(Constants.LOG_INFO);

    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected HttpSession session;
    public int defEnd = 0;
    public int defSTART = 29;

    @ModelAttribute
    public void setReqAndResp(HttpServletRequest request, HttpServletResponse response){
        this.request = request;
        this.response = response;
        this.session = request.getSession();
    }

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                new SimpleDateFormat("yyyy-MM-dd"), true));
    }

    /**
     * 输出信息到页面
     * @param msg:要输出的信息(可以是js脚本等)
     */
    public void printOutMsg(String msg){
        try {
            this.response.setCharacterEncoding("UTF-8");
            this.response.setContentType("text/html;charset=utf-8");
            PrintWriter out = null;
            out = this.response.getWriter();
            out.print(msg);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 输出信息到页面
     * @param response
     * @param msg
     */
    public void printOutMsg(HttpServletResponse response, String msg){
        try {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = null;
            out = response.getWriter();
            out.print(msg);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取请求完整路径
     * @param request
     * @return
     */
    public String getUrl(HttpServletRequest request){
        String url = request.getRequestURI();
        String params = "";
        if(request.getQueryString()!=null){
            params = request.getQueryString().toString();
        }
        if(!"".equals(params)){
            url = url+"?"+params;
        }
        return url;
    }

    /**
     * 获取日期
     * @param day   天
     */
    public String getDate(int day){
        StringBuffer s = new StringBuffer();
        Calendar c = Calendar.getInstance();
        int currentDay = c.get(Calendar.DATE);
        if(day < 0){
            c.add(Calendar.YEAR, -1);
            c.set(Calendar.DATE, currentDay);
        }else if(day == 29){
            c.add(Calendar.MONTH, -1);
            c.set(Calendar.DATE, currentDay);
        }else{
            c.add(Calendar.DATE, -day);
        }

        s.append(c.get(Calendar.YEAR)+"-");
        s.append((c.get(Calendar.MONTH)+1) < 10 ? ("0"+(c.get(Calendar.MONTH)+1)) : (c.get(Calendar.MONTH)+1));
        s.append("-");
        s.append(c.get(Calendar.DATE) < 10 ? ("0"+c.get(Calendar.DATE)) : c.get(Calendar.DATE));
        return s.toString();
    }

    /**
     * 转换统计的map
     * @param statMap       统计的map
     * @param constMap      常量的map
     * @return
     */
    public Map<String, Long> getFmtMap(Map<String, Long> statMap, Map<Integer, String> constMap){
        Map<String, Long> dataMap = null;
        if(statMap != null){
            dataMap = new LinkedHashMap<String, Long>();
            for(Entry<String, Long> entry : statMap.entrySet()){
                dataMap.put(constMap.get(Integer.valueOf(entry.getKey()))+"&"+Integer.valueOf(entry.getKey()), entry.getValue());
            }
        }
        return dataMap;
    }
    /**
     * 获取登录用户信息
     * @return
     */
    public SessionUser getSessionUser(){
        Object session = request.getSession().getAttribute(Constants.KEY_SESSION_USER);
        return session == null ? null : (SessionUser) session;
    }

    /**
     * 获取token
     * @param type(1:登录;2:注册;3:找回密码)
     * @return
     */
    protected RSAToken getRSAToken(int type){
        // 生成一个token
        String token = UUID.randomUUID().toString();
        if(type == 1){
            session.setAttribute(Constants.KEY_SESSION_TOKEN_LOGIN, token);
        }else if(type == 2){
            session.setAttribute(Constants.KEY_SESSION_TOKEN_REGISTER, token);
        }else if(type == 3){
            session.setAttribute(Constants.KEY_SESSION_TOKEN_FIND_PWD, token);
        }

        // 生成公钥信息
        RSAPublicKey publicKey = RSAUtils.getDefaultPublicKey();
        String modulus = new String(Hex.encodeHex(publicKey.getModulus().toByteArray()));
        String exponent = new String(Hex.encodeHex(publicKey.getPublicExponent().toByteArray()));

        RSAToken rsaToken = new RSAToken();
        rsaToken.setToken(token);
        rsaToken.setModulus(modulus);
        rsaToken.setExponent(exponent);

        return rsaToken;
    }

    /**
     *获取后台登陆用户信息 
     * 
     */
    public SessionUser getSessionAdminUser(){
        AiUserInfo session = (AiUserInfo) request.getSession().getAttribute(Constants.KEY_SESSION_ADMIN_USER);
        SessionUser adminUser = new SessionUser();
        adminUser.setUserId(session.getId());
        adminUser.setUsername(session.getUserName());
        return adminUser == null ? null : adminUser;
    }

    /**
     * 获取用户加密信息
     * @return
     */
    public String getDesUserInfo(){
        SessionUser sessionUser = getSessionUser();
        String encryptText = "";
        if(sessionUser != null){
            String plainText = sessionUser.getUsername()+"&"+sessionUser.getUserId();
            String secretKey = "3dbfac1abd334784860723ef2022a92f";
            try {
                encryptText = URLEncoder.encode(Des3.DESEncode(plainText, secretKey), "UTF-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return encryptText;
    }

    /**
     * 设置用户session
     * @param user
     */
    public void setSessionUser(AiUserInfo user){
        if(user != null){
            SessionUser sessionUser = new SessionUser();
            sessionUser.setUserId(user.getId());
            if(user.getUserName() != null && !"".equals(user.getUserName())){
                sessionUser.setUsername(user.getUserName());
            } else {
                if(user.getPhone() != null &&  !"".equals(user.getPhone())){
                    sessionUser.setUsername(user.getPhone());
                }else {
                    sessionUser.setUsername(user.getNickName());
                } 
            }
            sessionUser.setPhone(user.getPhone());
            sessionUser.setUserType(user.getUserType()==null?0:user.getUserType());
            sessionUser.setVipStatus(user.getVipLevel()==null?0:user.getVipLevel());
            sessionUser.setLogoPath(user.getLogoPath());
            session.setAttribute(Constants.KEY_SESSION_USER, sessionUser);
        }
    }

    public static void main(String[] args) throws Exception, Exception {
        String plainText = "zhouqi"+"&"+"8";
        String secretKey = "3dbfac1abd334784860723ef2022a92f";
        String dd = Des3.DESEncode(plainText, secretKey);
        System.out.println(dd);
        String encryptText = URLEncoder.encode(Des3.DESEncode(plainText, secretKey), "UTF-8");
        System.out.println(encryptText);
    }
<think>好的,用户的问题是关于如何在项目中添加和配置BaseController或其相关框架。首先,我需要明确用户提到的BaseController是什么。根据提供的引用内容,特别是引用[1]和[2],BaseController似乎是在CodeIgniter和若依(RuoYi)框架中使用的一个基类控制器,用于提供通用功能,比如视图自动加载或布局支持。 接下来,用户可能是在使用类似CodeIgniter或Spring MVC的框架,需要集成BaseController。但引用中提到的CodeIgniter-base-controller项目已经被标记为弃用,所以需要提醒用户这一点。此外,引用[3]和[4]涉及Spring MVC的注解和配置,说明用户可能对Spring MVC中的控制器配置也有兴趣。 我需要分情况讨论,因为不同的框架有不同的配置方法。首先处理CodeIgniter的情况,然后是若依框架,最后是Spring MVC,因为用户可能混淆了不同框架中的BaseController概念。 对于CodeIgniter,虽然原项目已弃用,但安装步骤仍然可以给出,同时建议替代方案。对于若依框架,引用[2]提到继承BaseController,需要说明其用途和配置方法。在Spring MVC中,通常不会直接使用BaseController,但可以通过自定义基类来实现类似功能,需要指导用户如何创建和配置。 此外,用户可能不太清楚不同框架之间的区别,需要明确区分,并提供每一步的具体操作,比如依赖添加、继承类、方法重写等。同时,要检查是否有遗漏的步骤,比如自动加载配置或注解的使用,确保配置正确。 最后,生成相关问题时要覆盖不同框架和常见问题,帮助用户进一步探索可能的需求。</think>### 如何添加和配置 BaseController 或相关框架 #### 一、CodeIgniter 的 BaseController 配置(已弃用) 引用[1]提到的 `codeigniter-base-controller` 是一个已弃用的项目,但若需参考其实现逻辑: 1. **手动实现基类控制器** - 在 `application/core/` 目录下创建 `MY_Controller.php` ```php class BaseController extends CI_Controller { public function __construct() { parent::__construct(); // 添加通用逻辑(如视图自动加载) } } ``` - 其他控制器继承此基类: ```php class UserController extends BaseController { // 控制器方法 } ``` #### 二、若依(RuoYi)框架的 BaseController 引用[2]提到若依框架通过继承 `BaseController` 实现通用功能(如日志记录、权限验证): 1. **配置步骤** - 查看 `BaseController` 的源码位置(通常位于 `framework/web/core` 目录) - 新建控制器时直接继承: ```java @Controller @RequestMapping("/user") public class UserController extends BaseController { // 使用基类提供的公共方法 } ``` - 确保项目依赖包含若依的 `framework` 模块(通过 Maven/Gradle 配置) #### 三、Spring MVC 自定义基类控制器 引用[3][4]提到 Spring MVC 中可通过自定义基类实现通用逻辑: 1. **创建 BaseController 类** ```java @Controller public class BaseController { // 通用方法(如统一响应格式) protected ResponseEntity<Result> success(Object data) { return ResponseEntity.ok(Result.success(data)); } } ``` 2. **子类控制器继承** ```java @RestController @RequestMapping("/api") public class UserController extends BaseController { @GetMapping("/users") public ResponseEntity<Result> getUsers() { return success(userService.getAll()); } } ``` 3. **依赖配置(Maven)** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` #### 四、通用注意事项 1. **框架兼容性** - 不同框架的 `BaseController` 实现方式不同,需遵循各自规范(如 CodeIgniter 要求文件路径,Spring 依赖注解) 2. **功能扩展** - 基类通常用于封装:请求预处理、日志记录、权限校验等[^2][^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值