Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
401 views
in Technique[技术] by (71.8m points)

java - Spring Boot - Authentication null

I have a link on my home page that leads to users posts page. It is visible only if user is logged in. Currently I'm getting

Cannot invoke "org.springframework.security.core.Authentication.getPrincipal()" because "auth" is null

when I try to get on homepage as a guest. I understand that Authentication requires a logged in user, but how exactly can I handle that exception or is there a better way to do it?

My controller

...
@GetMapping("/home")
public String home (Model model, Authentication auth) {

    UserPrincipal userPrincipal = (UserPrincipal) auth.getPrincipal();
    User user = userPrincipal.getUser();

    model.addAttribute("user", user);
    model.addAttribute("listPosts", postService.getAllPosts());

    return "home";
}
...

Link in my thymeleaf view

<li><a th:href="@{/{username}/posts (username = ${user.username})}" sec:authorize="isAuthenticated()">My posts</a></li>

Thanks

question from:https://stackoverflow.com/questions/65877874/spring-boot-authentication-null

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need to determine if the Authentication is present first:

public String home (Model model, Authentication auth) {
    if (auth != null && auth instanceof UserPrincipal) {
        UserPrincipal userPrincipal = (UserPrincipal) auth.getPrincipal();
        model.addAttribute("user", userPrincipal.getUser());
    }

    model.addAttribute("listPosts", postService.getAllPosts());

    return "home";
}

But then you would need to also handle the user coming through as null in the thymeleaf template.

You could leave it as null or inject a 'Guest' User object if not present to handle it that way.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...