Content Table

Spring Security Login Util

查看当前登录用户的信息,调用 SecurityUtils.getLoginUser() 即可:

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
package com.xtuer.utils;

import com.xtuer.bean.User;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

public final class SecurityUtils {
/**
* 获取登陆用户的信息
*
* @return 返回登陆的用户,如果没有登陆则返回 null
*/
public static User getLoginUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();

// URL 没有经过 Spring Security 登陆验证的 filter 时 auth 为 null
if (auth == null) {
return null;
}

Object p = auth.getPrincipal();

return p instanceof User ? (User) p : null;
}
}

getAuthentication() 返回的是一个 Authentication 对象,未登陆时它的 getPrinciple() 返回的是字符串 anonymousUser,登陆后返回的是 UserDetailsService.loadUserByUsername() 返回的对象,也即是说,我们可以实现一个 User 类,继承自 org.springframework.security.core.userdetails.User,在我们实现的 User 类中保存用户数据,在 loadUserByUsername() 中返回此用户对象。

User 类的实现请参考用户信息数据源一章

SpringMVC 处理 Ajax 映射

SpringMVC 返回 Json 数据给前端是件很简单的事,但是 SpringMVC 的 Controller 接收前端 Ajax传来的 Json 数据却不那么容易,前端和后端都要很小心,有一点不对就会出错,需要分为 2 种情况处理:

  • GET
  • PUT, POST, DELETE

Java 读写 CSV

Java-csv

使用 Javacsv 读写 CSV,如果 csv 文件中有空行,不会报错,比 commons-csv 好用,性能也更好一些。

Gradle 依赖

1
compile 'net.sourceforge.javacsv:javacsv:2.0'

读取 CSV:

1
2
3
4
5
6
7
8
9
10
import com.csvreader.CsvReader;

// CsvReader csvReader = new CsvReader("/Users/Biao/Desktop/20191017.csv", ',', new GB18030());
CsvReader csvReader = new CsvReader("/Users/Biao/Desktop/20191017.csv", ',', StandardCharsets.UTF_8);
csvReader.readHeaders();

while (csvReader.readRecord()) {
String name = csvReader.get(0); // csvReader.get("name");
...
}

写入 CSV:

1
2
3
4
5
6
7
8
9
10
11
12
CsvWriter writer = new CsvWriter("/Users/Biao/Desktop/test.csv", ',', StandardCharsets.UTF_8);

// 写入 CSV Headers
writer.writeRecord(new String[] { "账号", "类型", "角色", "时间", "内容" });

// 写入 CSV 内容
writer.writeRecord(new String[] { "1", "2", "3", "4", "5" });
writer.writeRecord(new String[] { "1", "2", "3", "4", "5" });
writer.writeRecord(new String[] { "1", "2", "3", "4", "5" });

// 结束写入,保存到文件
writer.close();