1
zj
2025-06-20 079e004fd2e65357aecc725a7be3cfe109978b0d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package project.ddos.internal;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
 
import org.springframework.security.providers.encoding.PasswordEncoder;
 
import kernel.exception.BusinessException;
import kernel.web.ApplicationUtil;
import kernel.web.Page;
import project.Constants;
import project.ddos.AdminUrlSpecialService;
import project.ddos.UrlSpecialService;
import project.ddos.model.UrlSpecial;
import project.log.Log;
import project.log.LogService;
import security.SecUser;
import security.internal.SecUserService;
 
@SuppressWarnings("rawtypes")
public class AdminUrlSpecialServiceImpl implements AdminUrlSpecialService {
    
    private LogService logService;
    
    private SecUserService secUserService;
    
    private PasswordEncoder passwordEncoder;
    
    private UrlSpecialService urlSpecialService;
 
    @Override
    public Page pagedQuery(int pageNo, int pageSize, String url_para) {
        if (pageNo <= 0) pageNo = 1;
        Page page = new Page(pageNo, pageSize, Integer.MAX_VALUE);
        
        StringBuilder sqlBuilder=new StringBuilder("SELECT UUID id,URL url,REMARKS remarks FROM T_URL_SPECIAL WHERE 1=1 ");
        ArrayList<Object> params=new ArrayList<Object>();
        if (null!=url_para && !(url_para=url_para.trim()).isEmpty()) {
            sqlBuilder.append("AND URL LIKE ? ");
            params.add("%"+url_para+"%");
        }
        
        sqlBuilder.append("LIMIT ?,?");
        params.add(page.getFirstElementNumber());
        params.add(pageSize);
        
        List<HashMap> list=ApplicationUtil.executeDQL(sqlBuilder.toString(),params.toArray(new Object[params.size()]),HashMap.class);
        page.setElements(list);
        return page;
    }
 
    @Override
    public void save(UrlSpecial entity, String operatorUsername, String loginSafeword, String ip) {
        if (urlSpecialService.cacheAllUrls().contains(entity.getUrl())) throw new BusinessException("url已经存在");
        
        checkLoginSafeword(operatorUsername, loginSafeword);
        
        SecUser user = this.secUserService.findUserByLoginName(operatorUsername);
        saveLog(user, operatorUsername,"ip:" + ip + "管理员新增特殊Url,url为[" + entity.getUrl() + "],备注为[" + entity.getRemarks() + "]");
        urlSpecialService.save(entity);
    }
 
    @Override
    public void update(UrlSpecial entity, String operatorUsername, String loginSafeword, String ip) {
        UrlSpecial urlSpecial = urlSpecialService.cacheById(entity.getId().toString());
        if (urlSpecial == null) throw new BusinessException("url不存在");
        
        if (!urlSpecial.getUrl().equals(entity.getUrl()) && urlSpecialService.cacheAllUrls().contains(entity.getUrl())) {
            throw new BusinessException("修改后的url已存在");
        }
        
        checkLoginSafeword(operatorUsername, loginSafeword);
        
        SecUser user = this.secUserService.findUserByLoginName(operatorUsername);
        saveLog(user, operatorUsername, "ip:" + ip + "管理员新增特殊Url,原url为[" + urlSpecial.getUrl() + "],原备注为["+urlSpecial.getRemarks() + "],新url为[" + entity.getUrl() + "],新备注为[" + entity.getRemarks() + "]");
        urlSpecial.setUrl(entity.getUrl());
        urlSpecial.setRemarks(entity.getRemarks());
        urlSpecialService.update(urlSpecial);
    }
 
    @Override
    public void delete(String id, String operatorUsername, String loginSafeword, String ip) {
        UrlSpecial urlSpecial = urlSpecialService.cacheById(id);
        if (urlSpecial == null) throw new BusinessException("url不存在");
        
        checkLoginSafeword(operatorUsername, loginSafeword);
        
        SecUser user = this.secUserService.findUserByLoginName(operatorUsername);
        saveLog(user, operatorUsername,"ip:"+ip+"管理员删除特殊Url,url为[" + urlSpecial.getUrl() + "],备注为[" + urlSpecial.getRemarks() + "]");
        
        this.urlSpecialService.delete(urlSpecial);
    }
    
    /**
     * 验证登录人资金密码
     * @param operatorUsername
     * @param loginSafeword
     */
    private void checkLoginSafeword(String operatorUsername, String loginSafeword) {
        SecUser sec = this.secUserService.findUserByLoginName(operatorUsername);
        String sysSafeword = sec.getSafeword();
        String safeword_md5 = passwordEncoder.encodePassword(loginSafeword, operatorUsername);
        if (!safeword_md5.equals(sysSafeword)) throw new BusinessException("登录人资金密码错误");
    }
    
    public void saveLog(SecUser secUser, String operator, String context) {
        Log log = new Log();
        log.setCategory(Constants.LOG_CATEGORY_OPERATION);
        log.setOperator(operator);
        log.setUsername(secUser.getUsername());
        log.setPartyId(secUser.getPartyId());
        log.setLog(context);
        log.setCreateTime(new Date());
        logService.saveSync(log);
    }
    
    public void setSecUserService(SecUserService secUserService) {
        this.secUserService = secUserService;
    }
 
    public void setLogService(LogService logService) {
        this.logService = logService;
    }
 
    public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }
 
    public void setUrlSpecialService(UrlSpecialService urlSpecialService) {
        this.urlSpecialService = urlSpecialService;
    }
}