–点击 置顶,修改帖子的类型。
–点击“加精”、“删除”,修改帖子的状态。
1、增加修改帖子状态的Mapper和Service方法
int updateType(int id, int type);
int updateStatus(int id, int status);
update discuss_post set type = #{type} where id = #{id}
2、增加处理置顶、加精、删除的Controller请求
使用消息队列触发事件:因为各个中间件部署在不同的机器上,es服务器和应用服务器需要通信,网络通信需要耗时,这个时候应用服务器等待的话响应慢,所以把这个操作交给kafka去处理;
// 置顶
@RequestMapping(path = "/top", method = RequestMethod.POST)
@ResponseBody
public String setTop(int id) {
discussPostService.updateType(id, 1);
// 触发发帖事件
Event event = new Event()
.setTopic(TOPIC_PUBLISH)
.setUserId(hostHolder.getUser().getId())
.setEntityType(ENTITY_TYPE_POST)
.setEntityId(id);
eventProducer.fireEvent(event);
return CommunityUtil.getJSONString(0);
}
// 删除
@RequestMapping(path = "/delete", method = RequestMethod.POST)
@ResponseBody
public String setDelete(int id) {
discussPostService.updateStatus(id, 2);
// 触发删帖事件
Event event = new Event()
.setTopic(TOPIC_DELETE)
.setUserId(hostHolder.getUser().getId())
.setEntityType(ENTITY_TYPE_POST)
.setEntityId(id);
eventProducer.fireEvent(event);
return CommunityUtil.getJSONString(0);
}
3、增加消费删帖事件
// 消费删帖事件
@KafkaListener(topics = {TOPIC_DELETE})
public void handleDeleteMessage(ConsumerRecord record) {
if (record == null || record.value() == null) {
logger.error("消息的内容为空!");
return;
}
Event event = JSONObject.parseObject(record.value().toString(), Event.class);
if (event == null) {
logger.error("消息格式错误!");
return;
}
}
4、给按钮增加点击的方法
添加隐藏文本传入帖子的id
当帖子已经置顶的时候置顶按钮变成灰色
当页面加载完成后通过选择器找到对应的按钮,并且实现其点击方法
$(function(){
$("#topBtn").click(setTop);
$("#wonderfulBtn").click(setWonderful);
$("#deleteBtn").click(setDelete);
});
/ 置顶
function setTop() {
$.post(
CONTEXT_PATH + "/discuss/top",
{"id":$("#postId").val()},
function(data) {
data = $.parseJSON(data);
if(data.code == 0) {
$("#topBtn").attr("disabled", "disabled");
} else {
alert(data.msg);
}
}
);
}
// 删除
function setDelete() {
$.post(
CONTEXT_PATH + "/discuss/delete",
{"id":$("#postId").val()},
function(data) {
data = $.parseJSON(data);
if(data.code == 0) {
location.href = CONTEXT_PATH + "/index";
} else {
alert(data.msg);
}
}
);
}
权限管理
–版主可以执行“置顶”、“加精”操作。
–管理员可以执行“删除”操作。
修改Security方法,增加不同用户可以实现的不同路径。
http.authorizeRequests()
.antMatchers( //需要拦截的路径
"/user/setting",
"/user/upload",
"/discuss/add",
"/comment/add/**",
"/letter/**",
"/notice/**",
"/like",
"/follow",
"/unfollow"
)
.hasAnyAuthority(
AUTHORITY_USER,
AUTHORITY_ADMIN,
AUTHORITY_MODERATOR
)
.antMatchers(
"/discuss/top",
"/discuss/wonderful"
)
.hasAnyAuthority(
AUTHORITY_MODERATOR
)
.antMatchers(
"/discuss/delete",
"/data/**"
)
.hasAnyAuthority(
AUTHORITY_ADMIN
)
.anyRequest().permitAll()
.and().csrf().disable();
按钮显示
–版主可以看到“置顶”、“加精”按钮。
– 管理员可以看到“删除”按钮。
1、引入Thymeleaf和Springsecurity5的依赖包
org.thymeleaf.extras thymeleaf-extras-springsecurity5
2、修改页面
声明命名空间



