Свойство компонента ‘principal.username’ не читается или имеет недопустимый метод получения, когда я выхожу из системы и пытаюсь перейти к student / list

#spring #spring-mvc #spring-security

#весна #spring-mvc #spring-security

Вопрос:

Когда я вхожу в систему с помощью spring security, я перенаправляюсь на student / list, но как только я выхожу из системы и снова пытаюсь получить доступ к ссылке, я получаю

 type=Internal Server Error, status=500
Invalid property 'principal.username
  

Он не находит действительное имя пользователя, но мне нужно снова получить доступ к странице входа, когда я выхожу из системы, это мой код jsp

 <form:form action="${contextPath}/authenticateTheUser" method="POST">
    <c:if test="${param.error !=null}">
        <i class="failed">Sorry! You have entered ivalid username/password</i>
    </c:if>
    <c:if test="${param.logout !=null}">
        <i class="logout">You Have Been Logged Out</i>
    </c:if>

    <table>
        <tr>
            <td><label>User Name</label></td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>Password</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td><input type="submit" name="Login"></td>
        </tr>
    </table>

    </form:form>
  

функция выхода из системы была добавлена в мой список-student, но как только я выхожу из системы, я ввожу свои учетные данные, и это дает мне белую метку 404, но когда я перехожу к student / list после получения этой ошибки, я вошел в систему как правильный пользователь, вот моя страница list-student

 <form:form action="${contextPath}/logout" method="POST">
            <input type="submit" value="Log Out">
        </form:form>
  

ContextPath ссылается на мой код настройки

 @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/student").hasRole("EMPLOYEE").antMatchers("/student/showFormForAdd/**")
                .hasRole("ADMIN").antMatchers("/student/addAddress/**/student/showFormForAdd/**").hasRole("MANAGER")
                .and().formLogin().loginPage("/login").loginProcessingUrl("/authenticateTheUser").permitAll().and()
                .logout().permitAll();

    }
  

В целом, мне нужно иметь возможность войти в систему и напрямую перенаправляться на мой список учеников, и если я выхожу из системы и снова вхожу в систему, мне нужно иметь ту же функциональность, а не получать белую метку 500 или свойство компонента ‘principal.username’ не читается вот мой код контроллера

 @Controller
@RequestMapping("/student")
public class StudentController {
@GetMapping("/list")
    public String listStudents(Model model) {
        List<Student> students = studentService.showAllStudents();
        model.addAttribute("students", students);
        return "list-students";
    }
}

  

мое сопоставление входа в систему

 @Controller

public class LoginController {

    @RequestMapping("/login")
    public String showMyLoginPage() {
        return "login-form";
    }

}
  

примечание мой контроллер входа в систему имеет значение по умолчанию /login , но my /list для my list-students имеет сопоставление запросов на уровне класса с именем /student