在Controller中获取认证信息
@Controller
public class IndexController {
@RequestMapping("/user")
public String user(Model model) {
String username = getUserName();
model.addAttribute("username",username);
return "user";
}
private String getUserName() {
// 获取认证信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// 检查用户是否认证
if(authentication == null || !authentication.isAuthenticated()) {
return "游客";
}
Object principal = authentication.getPrincipal();
if(principal instanceof UserDetails) {
return ((UserDetails) principal).getUsername();
} else {
return principal.toString();
}
}
}
会话控制
在配置类中通过下列选项控制会话何时创建以及Spring Security 如何与之交互
always
: 如果没有session, 则创建一个ifRequired
: 如果需要, 则创建一个. (默认)never
: Spring Security 不会主动创建session 但如果应用中其他地方创建了session 那么Spring Security 将会使用sessionstateless
: Spring Security 将不会创建session, 也不会使用session
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
}