Commit 2d3a429c by java-李谡

账号IP黑名单管理

parent c0032799
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
<html>
<head>
<title>账号黑名单</title>
<meta name="decorator" content="default"/>
<script type="text/javascript">
function page(n, s) {
if (n) $("#pageNo").val(n);
if (s) $("#pageSize").val(s);
$("#searchForm").attr("action", "${ctx}/sys/accountBlacklist/list");
$("#searchForm").submit();
return false;
}
</script>
</head>
<body>
<ul class="nav nav-tabs">
<li><a href="${ctx}/sys/accountBlacklist/list">账号黑名单</a></li>
</ul>
<form:form id="searchForm" modelAttribute="user" action="${ctx}/sys/accountBlacklist/list" method="post"
class="breadcrumb form-search ">
<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
<sys:tableSort id="orderBy" name="orderBy" value="${page.orderBy}" callback="page();"/>
<ul class="ul-form">
<li>
<label>登录账号:</label>
<form:input path="loginName" htmlEscape="false" maxlength="100" class="input-medium"/>
</li>
<li class="btns">
&nbsp;&nbsp;
<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询" onclick="return page();"/>
</li>
<li class="clearfix"></li>
</ul>
</form:form>
<sys:message content="${message}"/>
<table id="contentTable" class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th>编号</th>
<th>登录名</th>
<th>联系人名称</th>
<th>工号</th>
<th>公司名称</th>
<th>部门名称</th>
<th>手机号码</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${page.list}" var="user" varStatus="vs">
<tr>
<td>${page.pageSize*(page.pageNo-1)+vs.index+1}</td>
<td>${user.loginName }</td>
<td>${user.name }</td>
<td>${user.no }</td>
<td>${user.company.name }</td>
<td>${user.office.name }</td>
<td>${user.mobile }</td>
<td>
<a href="${ctx}/sys/accountBlacklist/remove?account=${user.loginName}"
onclick="return confirmx('确认要将账号<b>[${user.loginName}]</b>从封禁列表中移除吗?', this.href)">移除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="pagination">${page}</div>
</body>
</html>
\ No newline at end of file
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
<html>
<head>
<title>IP黑名单</title>
<meta name="decorator" content="default"/>
<script type="text/javascript">
function page(n, s) {
if (n) $("#pageNo").val(n);
if (s) $("#pageSize").val(s);
$("#searchForm").attr("action", "${ctx}/sys/ipBlacklist/list");
$("#searchForm").submit();
return false;
}
</script>
</head>
<body>
<ul class="nav nav-tabs">
<li><a href="${ctx}/sys/ipBlacklist/list">IP黑名单</a></li>
</ul>
<form:form id="searchForm" modelAttribute="sysLoginBlacklist" action="${ctx}/sys/ipBlacklist/list" method="post"
class="breadcrumb form-search ">
<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
<sys:tableSort id="orderBy" name="orderBy" value="${page.orderBy}" callback="page();"/>
<ul class="ul-form">
<li>
<label>IP地址:</label>
<form:input path="blackIp" htmlEscape="false" maxlength="100" class="input-medium"/>
</li>
<li class="btns">
&nbsp;&nbsp;
<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询" onclick="return page();"/>
</li>
<li class="clearfix"></li>
</ul>
</form:form>
<sys:message content="${message}"/>
<table id="contentTable" class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th>编号</th>
<th>IP地址</th>
<th>封禁时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${page.list}" var="ip" varStatus="vs">
<tr>
<td>${page.pageSize*(page.pageNo-1)+vs.index+1}</td>
<td>${ip.blackIp }</td>
<td>${ip.createTime }</td>
<td>
<a href="${ctx}/sys/ipBlacklist/remove?blackIp=${ip.blackIp}"
onclick="return confirmx('确认要将Ip地址<b>[${ip.blackIp}]</b>从封禁列表中移除吗?', this.href)">移除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="pagination">${page}</div>
</body>
</html>
\ No newline at end of file
......@@ -73,7 +73,6 @@
<th>结束时间</th>
<th>通话时长</th>
<th>通话结果</th>
<th></th>
</tr>
</thead>
<tbody>
......
......@@ -2,9 +2,9 @@
db.table.prefix=foc_
jdbc.type=mysql
jdbc.driver.class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://106.75.105.96:5508/jd_foc?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
jdbc.username=jd_foc
jdbc.password=FOC@sh2018
jdbc.url=jdbc:mysql://81.69.44.115:5508/jd_foc?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
jdbc.username=sms_develop
jdbc.password=Develop2018!@#
#\u521d\u59cb\u5316\u8fde\u63a5
jdbc.initialSize=0
#\u8fde\u63a5\u6c60\u7684\u6700\u5927\u6d3b\u52a8\u4e2a\u6570
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ejweb.modules.sys.dao.IpBlacklistDao">
<select id="findByIp" resultType="com.ejweb.modules.sys.entity.SysLoginBlacklist">
select id,black_ip,create_time from sys_login_blacklist
where black_ip=#{ip}
</select>
<select id="findList" resultType="com.ejweb.modules.sys.entity.SysLoginBlacklist">
select id,black_ip,create_time from sys_login_blacklist
</select>
<delete id="deleteByIp" parameterType="string">
delete from sys_login_blacklist where black_ip=#{ip}
</delete>
</mapper>
\ No newline at end of file
......@@ -114,22 +114,34 @@
<!-- 根据登录名查询用户 -->
<select id="getByLoginName" resultType="User" parameterType="User">
SELECT
<include refid="userColumns" /><!-- , ro.office_id AS "roleList.officeList.id" -->
<include refid="userColumns"/><!-- , ro.office_id AS "roleList.officeList.id" -->
FROM sys_user a
<include refid="userJoins" /><!-- LEFT JOIN sys_office2role ro
<include refid="userJoins"/><!-- LEFT JOIN sys_office2role ro
ON ro.role_id = r.id -->
WHERE a.login_name = #{loginName} AND a.del_flag = #{DEL_FLAG_NORMAL}
</select>
<select id="getByLoginNames" resultType="com.ejweb.modules.sys.entity.User">
SELECT
<include refid="userColumns"/>
FROM sys_user a
<include refid="userJoins"/>
WHERE a.del_flag = 0
and a.login_name in
<foreach collection="usernames" item="username" separator="," open="(" close=")">
#{username}
</foreach>
</select>
<!-- 分页查询用户信息 -->
<select id="findList" resultType="User">
SELECT
<include refid="userColumns" />
<include refid="userColumns"/>
,up.duty_name
FROM sys_user a
<include refid="userJoins" />
<include refid="userJoins"/>
LEFT JOIN sys_user_profiles up
ON a.id = up.user_id
ON a.id = up.user_id
<if test="role != null and role.id != null and role.id != ''">
JOIN sys_user2role ur ON ur.user_id = a.id AND ur.role_id = #{role.id}
</if>
......
#
#redis.host=106.75.105.96
#
redis.host=81.69.44.115
redis.port=7211
redis.auth=bbdtek!@#2018
redis.timeout=10000
redis.maxTotal=100
redis.maxIdle=20
redis.maxWaitMillis=10000
redis.testOnBorrow=true
redis.testOnReturn=true
redis.dbIndex=3
redis.ipWithinSeconds=60
redis.ipLimitTimes=10
redis.usernameWithinSeconds=60
redis.usernameLimitTimes=6
redis.blackUsernameTime=60
\ No newline at end of file
......@@ -25,6 +25,7 @@
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:ejweb.properties</value>
<value>classpath:redis.properties</value>
<value>classpath:mybatis-refresh.properties</value>
</list>
</property>
......@@ -134,15 +135,31 @@
<property name="validationQuery" value="${jdbc.validationQuery}" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters" value="stat" />
<property name="filters" value="stat"/>
</bean>
<!--设置jedisPool链接池的配置-->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxTotal}"/>
<property name="maxIdle" value="${redis.maxIdle}"/>
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
<property name="testOnReturn" value="${redis.testOnReturn}"/>
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port}"/>
<constructor-arg name="timeout" value="${redis.timeout}"/>
<constructor-arg name="password" value="${redis.auth}"/>
</bean>
</beans>
\ No newline at end of file
package com.ejweb.core.utils;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
/**
* @author lisu
*/
@Component
public class RedisUtils {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private JedisPool jedisPool;
/**
* 通过key获取储存在redis中的value
* 并释放连接
*
* @param key
* @param indexDb 选择redis库 0-15
* @return 成功返回value 失败返回null
*/
public String get(String key, int indexDb) {
Jedis jedis = null;
String value = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
value = jedis.get(key);
log.info(value);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return value;
}
/**
* 获取所有key
*
* @param pattern
* @param indexDb
* @return
*/
public Set<String> keys(String pattern, int indexDb) {
Jedis jedis = null;
Set<String> value = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
value = jedis.keys(pattern);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return value;
}
public Long del(String key, int indexDb) {
Jedis jedis = null;
Long value = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
value = jedis.del(key);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return value;
}
/**
* 通过key 对value进行加值+1操作,当value不是int类型时会返回错误,当key不存在是则value为1
*
* @param key
* @return 加值后的结果
*/
public Long incr(String key, int indexDb) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
res = jedis.incr(key);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return res;
}
/**
* 通过key 对value进行加值+1操作,当value不是int类型时会返回错误,当key不存在是则value为1
* 自增不取消过期时间
*
* @param key
* @return 加值后的结果
*/
public Long incrNotResetExpireTime(String key, int indexDb) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
Integer expireTime = jedis.ttl(key).intValue();
res = jedis.incr(key);
// jedis.expireAt(key, expireTime);
res = jedis.expire(key, expireTime);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return res;
}
public String set(String key, Object value, int indexDb) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
JSON.toJSONString(value);
return jedis.set(key, JSON.toJSONString(value));
} catch (Exception e) {
log.error(e.getMessage());
return "0";
} finally {
returnResource(jedisPool, jedis);
}
}
/**
* 设置过期时间
*
* @param key
* @param unixTime 过期时间的时间戳(秒)
* @return
*/
public Long expireAt(String key, long unixTime, int indexDb) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
res = jedis.expireAt(key, unixTime);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return res;
}
/**
* 设置过期时间
*
* @param key
* @param seconds 过期时间(秒)
* @return
*/
public Long expire(String key, int seconds, int indexDb) {
Jedis jedis = null;
Long res = null;
try {
jedis = jedisPool.getResource();
jedis.select(indexDb);
res = jedis.expire(key, seconds);
} catch (Exception e) {
log.error(e.getMessage());
} finally {
returnResource(jedisPool, jedis);
}
return res;
}
/**
* 返还到连接池
*
* @param jedisPool
* @param jedis
*/
public static void returnResource(JedisPool jedisPool, Jedis jedis) {
if (jedis != null) {
jedisPool.returnResource(jedis);
}
}
}
\ No newline at end of file
package com.ejweb.modules.sys.dao;
import com.ejweb.core.persistence.CrudDao;
import com.ejweb.modules.sys.entity.SysLoginBlacklist;
import java.util.List;
/**
* @author LEGION
*/
public interface IpBlacklistDao extends CrudDao<SysLoginBlacklist> {
/**
* 根据IP查询黑名单
*
* @param ip ip地址
* @return
*/
SysLoginBlacklist findByIp(String ip);
/**
* 根据IP查询黑名单
*
* @param
* @return
*/
List<SysLoginBlacklist> findList();
/**
* 删除黑名单
*
* @param ip
*/
void deleteByIp(String ip);
}
......@@ -3,47 +3,62 @@
*/
package com.ejweb.modules.sys.dao;
import java.util.List;
import com.ejweb.core.persistence.CrudDao;
import com.ejweb.modules.sys.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户DAO接口
*
* @author ThinkGem
* @version 2014-05-16
*/
public interface UserDao extends CrudDao<User> {
/**
* 根据登录名称查询用户
* @param loginName
*
* @param user
* @return
*/
public User getByLoginName(User user);
User getByLoginName(User user);
/**
* 根据登录名称查询用户
*
* @param usernames 登录名集合
* @return
*/
List<User> getByLoginNames(@Param("usernames") List<String> usernames);
/**
* 通过OfficeId获取用户列表,仅返回用户id和name(树查询用户时用)
*
* @param user
* @return
*/
public List<User> findUserByOfficeId(User user);
/**
* 查询全部用户数目
*
* @return
*/
public long findAllCount(User user);
/**
* 更新用户密码
*
* @param user
* @return
*/
public int updatePasswordById(User user);
/**
* 更新登录信息,如:登录IP、登录时间
*
* @param user
* @return
*/
......@@ -51,37 +66,42 @@ public interface UserDao extends CrudDao<User> {
/**
* 删除用户角色关联数据
*
* @param user
* @return
*/
public int deleteUserRole(User user);
/**
* 插入用户角色关联数据
*
* @param user
* @return
*/
public int insertUserRole(User user);
/**
* 更新用户信息
*
* @param user
* @return
*/
public int updateUserInfo(User user);
/**
* 通过user.no判断是否有相同的雇员
*
* @param user
* @return
*/
public Long findAllByNo(User user);
/**
* hrm更新user数据
*
* @param user
*/
public void updateUserByHrm(User user);
}
package com.ejweb.modules.sys.entity;
import com.ejweb.core.persistence.DataEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
* @author LEGION
*/
public class SysLoginBlacklist extends DataEntity<SysLoginBlacklist> {
private static final long serialVersionUID = 1L;
private String id;
private String blackIp;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String createTime;
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getBlackIp() {
return blackIp;
}
public void setBlackIp(String blackIp) {
this.blackIp = blackIp;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
}
package com.ejweb.modules.sys.service;
import com.ejweb.core.persistence.Page;
import com.ejweb.core.utils.RedisUtils;
import com.ejweb.core.utils.StringUtils;
import com.ejweb.modules.sys.dao.UserDao;
import com.ejweb.modules.sys.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
* 用户账号封禁服务类
*
* @author LEGION
*/
@Service
public class AccountBlacklistService {
@Autowired
private UserDao userDao;
@Autowired
private RedisUtils redisUtils;
@Value("${redis.dbIndex}")
private int indexDb;
public Page<User> getPage(Page<User> page, User user) {
List<User> list = new ArrayList<>();
if (!StringUtils.isEmpty(user.getLoginName())) {
String blackName = redisUtils.get("black_username:" + user.getLoginName(), indexDb);
if (!StringUtils.isEmpty(blackName)) {
user = userDao.getByLoginName(user);
if (Objects.nonNull(user)) {
list.add(user);
}
}
} else {
Set<String> stringSet = redisUtils.keys("black_username:*", indexDb);
List<String> usernames = new ArrayList<>();
if (!CollectionUtils.isEmpty(stringSet)) {
for (String username : stringSet) {
String str = username.substring(username.indexOf(":") + 1);
usernames.add(str);
}
list = userDao.getByLoginNames(usernames);
}
}
page.setList(list);
return page;
}
public void deleteAccountBlacklist(String account) {
String key = "black_username:" + account;
redisUtils.del(key, indexDb);
redisUtils.del(account, indexDb);
}
}
package com.ejweb.modules.sys.service;
import com.ejweb.core.persistence.Page;
import com.ejweb.core.utils.StringUtils;
import com.ejweb.modules.sys.dao.IpBlacklistDao;
import com.ejweb.modules.sys.entity.SysLoginBlacklist;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author LEGION
*/
@Service
public class IpBlacklistService {
@Autowired
private IpBlacklistDao ipBlacklistDao;
public SysLoginBlacklist getByIp(String ip) {
SysLoginBlacklist ipBlacklist = ipBlacklistDao.findByIp(ip);
return ipBlacklist;
}
public Page<SysLoginBlacklist> getPage(Page<SysLoginBlacklist> page, SysLoginBlacklist ipBlacklist) {
List<SysLoginBlacklist> list = new ArrayList<>();
ipBlacklist.setPage(page);
if (!StringUtils.isEmpty(ipBlacklist.getBlackIp())) {
ipBlacklist = ipBlacklistDao.findByIp(ipBlacklist.getBlackIp());
if (Objects.nonNull(ipBlacklist)) {
list.add(ipBlacklist);
}
} else {
list = ipBlacklistDao.findList(ipBlacklist);
}
page.setList(list);
return page;
}
public void delete(String ip) {
ipBlacklistDao.deleteByIp(ip);
}
}
package com.ejweb.modules.sys.web;
import com.ejweb.core.base.BaseController;
import com.ejweb.core.persistence.Page;
import com.ejweb.core.utils.RedisUtils;
import com.ejweb.core.utils.StringUtils;
import com.ejweb.modules.sys.entity.User;
import com.ejweb.modules.sys.service.AccountBlacklistService;
import com.ejweb.modules.sys.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 账号及IP封禁控制类
*
* @author LEGION
*/
@Controller
@RequestMapping(value = "${adminPath}/sys/accountBlacklist")
public class AccountBlacklistController extends BaseController {
@Autowired
private AccountBlacklistService accountBlacklistService;
@Autowired
private SystemService systemService;
@ModelAttribute
public User get(@RequestParam(required = false) String loginName) {
if (StringUtils.isNotBlank(loginName)) {
return systemService.getUserByLoginName(loginName);
} else {
return new User();
}
}
/**
* 查询封禁账号列表
*
* @param user 用户实体
* @return
*/
@RequestMapping(value = "list")
public String accountBlacklist(Model model, User user, HttpServletRequest request, HttpServletResponse response) {
Page<User> page = accountBlacklistService.getPage(new Page<>(request, response), user);
model.addAttribute("page", page);
return "modules/contact/accountBlacklist";
}
/**
* 删除封禁账号(解禁)
*
* @param account 登录账号
* @return
*/
@RequestMapping(value = "remove")
public String removeAccountBlacklist(@RequestParam() String account) {
accountBlacklistService.deleteAccountBlacklist(account);
return "redirect:" + adminPath + "/sys/accountBlacklist/list?repage";
}
}
package com.ejweb.modules.sys.web;
import com.ejweb.core.base.BaseController;
import com.ejweb.core.persistence.Page;
import com.ejweb.core.utils.StringUtils;
import com.ejweb.modules.sys.entity.SysLoginBlacklist;
import com.ejweb.modules.sys.service.IpBlacklistService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author LEGION
*/
@Controller
@RequestMapping(value = "${adminPath}/sys/ipBlacklist")
public class IpBlacklistController extends BaseController {
@Autowired
private IpBlacklistService ipBlacklistService;
@ModelAttribute
public SysLoginBlacklist get(@RequestParam(required = false) String ip) {
if (StringUtils.isNotBlank(ip)) {
return ipBlacklistService.getByIp(ip);
} else {
return new SysLoginBlacklist();
}
}
/**
* 查询封禁IP列表
*
* @param ipBlacklist 用户实体
* @return
*/
@RequestMapping(value = "list")
public String IPlist(Model model, SysLoginBlacklist ipBlacklist, HttpServletRequest request, HttpServletResponse response) {
Page<SysLoginBlacklist> page = ipBlacklistService.getPage(new Page<>(request, response), ipBlacklist);
model.addAttribute("page", page);
return "modules/contact/ipBlacklist";
}
/**
* 删除封禁IP(解禁)
*
* @param blackIp
* @return
*/
@RequestMapping(value = "remove")
public String removeIp(@RequestParam() String blackIp) {
ipBlacklistService.delete(blackIp);
return "redirect:" + adminPath + "/sys/ipBlacklist/list";
}
}
......@@ -3,30 +3,7 @@
*/
package com.ejweb.modules.sys.web;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolationException;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.ejweb.core.validator.BeanValidators;
import com.ejweb.core.base.BaseController;
import com.ejweb.core.conf.GConstants;
import com.ejweb.core.persistence.Page;
import com.ejweb.core.utils.DateUtils;
......@@ -34,15 +11,33 @@ import com.ejweb.core.utils.FileManipulation;
import com.ejweb.core.utils.StringUtils;
import com.ejweb.core.utils.excel.ExportExcel;
import com.ejweb.core.utils.excel.ImportExcel;
import com.ejweb.core.base.BaseController;
import com.ejweb.core.validator.BeanValidators;
import com.ejweb.modules.sys.entity.Office;
import com.ejweb.modules.sys.entity.Role;
import com.ejweb.modules.sys.entity.User;
import com.ejweb.modules.sys.service.SystemService;
import com.ejweb.modules.sys.utils.UserUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 用户Controller
*
* @author ThinkGem
* @version 2013-8-29
*/
......@@ -52,25 +47,26 @@ public class UserController extends BaseController {
@Autowired
private SystemService systemService;
@ModelAttribute
public User get(@RequestParam(required=false) String id) {
if (StringUtils.isNotBlank(id)){
public User get(@RequestParam(required = false) String id) {
if (StringUtils.isNotBlank(id)) {
return systemService.getUser(id);
}else{
} else {
return new User();
}
}
@RequiresPermissions("sys:user:view")
@RequestMapping(value = {"index"})
public String index(User user, Model model) {
return "modules/sys/userIndex";
}
@RequestMapping(value = {"userList"})
public String userList(User user, HttpServletRequest request, HttpServletResponse response,
Model model) {
Model model) {
String userIdlist = request.getParameter("userIdlist");
String userIds = user.getUserIds();
String userNames = user.getUserNames();
......@@ -88,12 +84,12 @@ public class UserController extends BaseController {
arr.add(userIdlist);
}
}
if(StringUtils.isEmpty(userNames)){
if (StringUtils.isEmpty(userNames)) {
userNames = "";
for(int i=0;i<arr.size();i++){
for (int i = 0; i < arr.size(); i++) {
User u = systemService.getUser(arr.get(i));
userNames += u.getName()+"-";
userNames += u.getName() + "-";
}
}
Page<User> page = systemService.findUser(new Page<User>(request, response), user);
......@@ -113,7 +109,7 @@ public class UserController extends BaseController {
}
if (StringUtils.isNotEmpty(userIds)) {
model.addAttribute("userIds", userIds);
model.addAttribute("userNames", userNames.substring(0, userNames.length()-1));
model.addAttribute("userNames", userNames.substring(0, userNames.length() - 1));
}
model.addAttribute("page", page);
return "modules/contact/userSelect";
......@@ -126,7 +122,7 @@ public class UserController extends BaseController {
model.addAttribute("page", page);
return "modules/sys/userList";
}
@ResponseBody
@RequiresPermissions("sys:user:view")
@RequestMapping(value = {"listData"})
......@@ -138,10 +134,10 @@ public class UserController extends BaseController {
@RequiresPermissions("sys:user:view")
@RequestMapping(value = "form")
public String form(User user, Model model) {
if (user.getCompany()==null || user.getCompany().getId()==null){
if (user.getCompany() == null || user.getCompany().getId() == null) {
user.setCompany(UserUtils.getUser().getCompany());
}
if (user.getOffice()==null || user.getOffice().getId()==null){
if (user.getOffice() == null || user.getOffice().getId() == null) {
user.setOffice(UserUtils.getUser().getOffice());
}
model.addAttribute("user", user);
......@@ -152,7 +148,7 @@ public class UserController extends BaseController {
@RequiresPermissions("sys:user:edit")
@RequestMapping(value = "save")
public String save(User user, HttpServletRequest request, Model model, RedirectAttributes redirectAttributes) {
if(GConstants.isDemoMode()){
if (GConstants.isDemoMode()) {
addMessage(redirectAttributes, "演示模式,不允许操作!");
return "redirect:" + adminPath + "/sys/user/list?repage";
}
......@@ -163,18 +159,18 @@ public class UserController extends BaseController {
if (StringUtils.isNotBlank(user.getNewPassword())) {
user.setPassword(SystemService.entryptPassword(user.getNewPassword()));
}
if (!beanValidator(model, user)){
if (!beanValidator(model, user)) {
return form(user, model);
}
if (!"true".equals(checkLoginName(user.getOldLoginName(), user.getLoginName()))){
if (!"true".equals(checkLoginName(user.getOldLoginName(), user.getLoginName()))) {
addMessage(model, "保存用户'" + user.getLoginName() + "'失败,登录名已存在");
return form(user, model);
}
// 角色数据有效性验证,过滤不在授权内的角色
List<Role> roleList = Lists.newArrayList();
List<String> roleIdList = user.getRoleIdList();
for (Role r : systemService.findAllRole(new Role())){
if (roleIdList.contains(r.getId())){
for (Role r : systemService.findAllRole(new Role())) {
if (roleIdList.contains(r.getId())) {
roleList.add(r);
}
}
......@@ -183,33 +179,34 @@ public class UserController extends BaseController {
// 保存用户信息
systemService.saveUser(user);
// 清除当前用户缓存
if (user.getLoginName().equals(UserUtils.getUser().getLoginName())){
if (user.getLoginName().equals(UserUtils.getUser().getLoginName())) {
UserUtils.clearCache();
}
addMessage(redirectAttributes, "保存用户'" + user.getLoginName() + "'成功");
return "redirect:" + adminPath + "/sys/user/list?repage";
}
@RequiresPermissions("sys:user:edit")
@RequestMapping(value = "delete")
public String delete(User user, RedirectAttributes redirectAttributes) {
if(GConstants.isDemoMode()){
if (GConstants.isDemoMode()) {
addMessage(redirectAttributes, "演示模式,不允许操作!");
return "redirect:" + adminPath + "/sys/user/list?repage";
}
if (UserUtils.getUser().getId().equals(user.getId())){
if (UserUtils.getUser().getId().equals(user.getId())) {
addMessage(redirectAttributes, "删除用户失败, 不允许删除当前用户");
}else if (User.isAdmin(user.getId())){
} else if (User.isAdmin(user.getId())) {
addMessage(redirectAttributes, "删除用户失败, 不允许删除超级管理员用户");
}else{
} else {
systemService.deleteUser(user);
addMessage(redirectAttributes, "删除用户成功");
}
return "redirect:" + adminPath + "/sys/user/list?repage";
}
/**
* 导出用户数据
*
* @param user
* @param request
* @param response
......@@ -217,29 +214,30 @@ public class UserController extends BaseController {
* @return
*/
@RequiresPermissions("sys:user:view")
@RequestMapping(value = "export", method=RequestMethod.POST)
@RequestMapping(value = "export", method = RequestMethod.POST)
public String exportFile(User user, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
try {
String fileName = "用户数据"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
String fileName = "用户数据" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
Page<User> page = systemService.findUser(new Page<User>(request, response, -1), user);
new ExportExcel("用户数据", User.class).setDataList(page.getList()).write(response, fileName).dispose();
return null;
} catch (Exception e) {
addMessage(redirectAttributes, "导出用户失败!失败信息:"+e.getMessage());
addMessage(redirectAttributes, "导出用户失败!失败信息:" + e.getMessage());
}
return "redirect:" + adminPath + "/sys/user/list?repage";
}
/**
* 导入用户数据
*
* @param file
* @param redirectAttributes
* @return
*/
@RequiresPermissions("sys:user:edit")
@RequestMapping(value = "import", method=RequestMethod.POST)
@RequestMapping(value = "import", method = RequestMethod.POST)
public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
if(GConstants.isDemoMode()){
if (GConstants.isDemoMode()) {
addMessage(redirectAttributes, "演示模式,不允许操作!");
return "redirect:" + adminPath + "/sys/user/list?repage";
}
......@@ -250,40 +248,41 @@ public class UserController extends BaseController {
FileManipulation.check(file.getOriginalFilename());
ImportExcel ei = new ImportExcel(file, 1, 0);
List<User> list = ei.getDataList(User.class);
for (User user : list){
try{
if ("true".equals(checkLoginName("", user.getLoginName()))){
for (User user : list) {
try {
if ("true".equals(checkLoginName("", user.getLoginName()))) {
user.setPassword(SystemService.entryptPassword("123456"));
BeanValidators.validateWithException(validator, user);
systemService.saveUser(user);
successNum++;
}else{
failureMsg.append("<br/>登录名 "+user.getLoginName()+" 已存在; ");
} else {
failureMsg.append("<br/>登录名 " + user.getLoginName() + " 已存在; ");
failureNum++;
}
}catch(ConstraintViolationException ex){
failureMsg.append("<br/>登录名 "+user.getLoginName()+" 导入失败:");
} catch (ConstraintViolationException ex) {
failureMsg.append("<br/>登录名 " + user.getLoginName() + " 导入失败:");
List<String> messageList = BeanValidators.extractPropertyAndMessageAsList(ex, ": ");
for (String message : messageList){
failureMsg.append(message+"; ");
for (String message : messageList) {
failureMsg.append(message + "; ");
failureNum++;
}
}catch (Exception ex) {
failureMsg.append("<br/>登录名 "+user.getLoginName()+" 导入失败:"+ex.getMessage());
} catch (Exception ex) {
failureMsg.append("<br/>登录名 " + user.getLoginName() + " 导入失败:" + ex.getMessage());
}
}
if (failureNum>0){
failureMsg.insert(0, ",失败 "+failureNum+" 条用户,导入信息如下:");
if (failureNum > 0) {
failureMsg.insert(0, ",失败 " + failureNum + " 条用户,导入信息如下:");
}
addMessage(redirectAttributes, "已成功导入 "+successNum+" 条用户"+failureMsg);
addMessage(redirectAttributes, "已成功导入 " + successNum + " 条用户" + failureMsg);
} catch (Exception e) {
addMessage(redirectAttributes, "导入用户失败!失败信息:"+e.getMessage());
addMessage(redirectAttributes, "导入用户失败!失败信息:" + e.getMessage());
}
return "redirect:" + adminPath + "/sys/user/list?repage";
}
/**
* 下载导入用户数据模板
*
* @param response
* @param redirectAttributes
* @return
......@@ -293,17 +292,19 @@ public class UserController extends BaseController {
public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
try {
String fileName = "用户数据导入模板.xlsx";
List<User> list = Lists.newArrayList(); list.add(UserUtils.getUser());
List<User> list = Lists.newArrayList();
list.add(UserUtils.getUser());
new ExportExcel("用户数据", User.class, 2).setDataList(list).write(response, fileName).dispose();
return null;
} catch (Exception e) {
addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
}
return "redirect:" + adminPath + "/sys/user/list?repage";
}
/**
* 验证登录名是否有效
*
* @param oldLoginName
* @param loginName
* @return
......@@ -311,9 +312,9 @@ public class UserController extends BaseController {
@ResponseBody
@RequestMapping(value = "checkLoginName")
public String checkLoginName(String oldLoginName, String loginName) {
if (loginName !=null && loginName.equals(oldLoginName)) {
if (loginName != null && loginName.equals(oldLoginName)) {
return "true";
} else if (loginName !=null && systemService.getUserByLoginName(loginName) == null) {
} else if (loginName != null && systemService.getUserByLoginName(loginName) == null) {
return "true";
}
return "false";
......@@ -321,6 +322,7 @@ public class UserController extends BaseController {
/**
* 用户信息显示及保存
*
* @param user
* @param model
* @return
......@@ -329,8 +331,8 @@ public class UserController extends BaseController {
@RequestMapping(value = "info")
public String info(User user, HttpServletResponse response, Model model) {
User currentUser = UserUtils.getUser();
if (StringUtils.isNotBlank(user.getName())){
if(GConstants.isDemoMode()){
if (StringUtils.isNotBlank(user.getName())) {
if (GConstants.isDemoMode()) {
model.addAttribute("message", "演示模式,不允许操作!");
return "modules/sys/userInfo";
}
......@@ -349,6 +351,7 @@ public class UserController extends BaseController {
/**
* 返回用户信息
*
* @return
*/
@RequiresPermissions("user")
......@@ -357,9 +360,10 @@ public class UserController extends BaseController {
public User infoData() {
return UserUtils.getUser();
}
/**
* 修改个人用户密码
*
* @param oldPassword
* @param newPassword
* @param model
......@@ -369,37 +373,36 @@ public class UserController extends BaseController {
@RequestMapping(value = "modifyPwd")
public String modifyPwd(String oldPassword, String newPassword, Model model) {
User user = UserUtils.getUser();
if (StringUtils.isNotBlank(oldPassword) && StringUtils.isNotBlank(newPassword)){
if(GConstants.isDemoMode()){
if (StringUtils.isNotBlank(oldPassword) && StringUtils.isNotBlank(newPassword)) {
if (GConstants.isDemoMode()) {
model.addAttribute("message", "演示模式,不允许操作!");
return "modules/sys/userModifyPwd";
}
if (SystemService.validatePassword(oldPassword, user.getPassword())){
if (SystemService.validatePassword(oldPassword, user.getPassword())) {
systemService.updatePasswordById(user.getId(), user.getLoginName(), newPassword);
model.addAttribute("message", "修改密码成功");
}else{
} else {
model.addAttribute("message", "修改密码失败,旧密码错误");
}
}
model.addAttribute("user", user);
return "modules/sys/userModifyPwd";
}
@RequiresPermissions("user")
@ResponseBody
@RequestMapping(value = "treeData")
public List<Map<String, Object>> treeData(@RequestParam(required=false) String officeId, HttpServletResponse response) {
public List<Map<String, Object>> treeData(@RequestParam(required = false) String officeId, HttpServletResponse response) {
List<Map<String, Object>> mapList = Lists.newArrayList();
List<User> list = systemService.findUserByOfficeId(officeId);
for (int i=0; i<list.size(); i++){
for (int i = 0; i < list.size(); i++) {
User e = list.get(i);
Map<String, Object> map = Maps.newHashMap();
map.put("id", "u_"+e.getId());
map.put("id", "u_" + e.getId());
map.put("pId", officeId);
map.put("name", StringUtils.replace(e.getName(), " ", ""));
mapList.add(map);
}
return mapList;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment