Как получить имя пользователя anonymousUser, если аутентификация входа не удалась в безопасности Java-весны? - PullRequest
0 голосов
/ 07 июня 2018

Я борюсь с проблемой за последние пару недель.Пожалуйста, помогите!

org.springframework.security.web.authentication.AnonymousAuthenticationFilter - Заполненный SecurityContextHolder с анонимным токеном: 'org.springframework.security.authentication.AnonymousAuthentication *oken@9055714:1005 *;Полномочия: [ЗАЩИЩЕНО];Аутентифицировано: правда;Подробности: org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: 0: 0: 0: 0: 0: 0: 0: 1;SessionId: 879CE33EC09255373A6D10FAF8B12EE6;Предоставленные полномочия: ROLE_ANONYMOUS '

Я хочу знать, почему имя пользователя anonymousUser , если я ввожу правильное имя пользователя и неверный пароль?

Я хочу получить имя пользователячто я ввел на странице входа.Например, если я ввожу admin в имени пользователя и неверном пароле, имя пользователя должно прийти admin, а не anonymousUser.

Когда я делаю auth.getName();, тогда я также получаю anonymousUser .

Пожалуйста, помогите !!!

Login.jsp

<form method="post" action="<c:url value='j_spring_security_check' />">
<div class="row">
  <div class="col-md-offset-5 col-md-3">
    <div><h2>Login Here</h2> </div>
        <div class="form-login">
        <h4 style="color: red">${message}</h4>
        <input type="text" name="username" id="userName" class="form-control input-sm chat-input" placeholder="Username" required="required" pattern="[0-9]{0,10}" title="Username should not be greater than 10 letters and it should be Alps ID"/>
        </br>                                                   
        <input type="password" name="password" id="userPassword" class="form-control input-sm chat-input" placeholder="Password" required="required" pattern="[A-Za-z0-9!$#%]{8,20}" title="Password should contain A-Z a-z 0-9 ! $ # %"/>
        </br>              
       <!--  <!-- CAPTCHAA -->
        <div class="wrapper">
        <span class="group-btn">                          
            <input type="submit" id="login" value="Login" class="btn btn-primary btn-md"/><!-- <a href="#" class="btn btn-primary btn-md">login <i class="fa fa-sign-in"></i></a> -->                
        </span>
        </div>
        </div>

    </div>
</div>
</form>        

LoginController

@RequestMapping("login")
public ModelAndView getLoginForm(
        String authfailed,
        String logout, String denied,HttpServletRequest request, HttpServletResponse response) 
        throws ClassNotFoundException, SQLException, UsernameNotFoundException, IOException {
        String message = "";


    if (authfailed != null) {           
        message = "Invalid username or password, try again !";

        HttpSession session = request.getSession(true);
        String uname = (String) session.getAttribute("username");

        PrintWriter out = new PrintWriter(System.out);          
        //response.sendRedirect("/incidentManagementPortal/PasswordReset");

    } else if (logout != null) {
        request.getSession().invalidate();
        eraseCookie(request,response);
        message = "Logged Out successfully, login again to continue !";

    } else if (denied != null) {
        message = "Access denied for this user !";

    }           
    return new ModelAndView("login", "message", message);
}

При сбое аутентификации происходит переход к вышеуказанному методу, и если я использую request.getParameter ('username');я получаю NULL.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Используя AnonymousAuthenticationFilter, вы всегда получите AnonymousAuthenticationToken, который по умолчанию имеет принципала "anonymousUser"

public AnonymousAuthenticationFilter(String key) {
    this(key, "anonymousUser", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS"));
}

protected Authentication createAuthentication(HttpServletRequest request) {
    AnonymousAuthenticationToken auth = new AnonymousAuthenticationToken(key, principal, authorities);
    auth.setDetails(authenticationDetailsSource.buildDetails(request));

    return auth;
}

Таким образом, вы можете настроить принципала через конструктор, но он всегда будет иметь одно и то же значение,Может быть, AnonymousAuthenticationFilter не подходит для вашего случая использования.

0 голосов
/ 07 июня 2018

Это просто сообщение формы, поэтому вы можете получить его из параметров запроса.

По умолчанию используйте request.getParameter ("j_username").Если вы настраиваете нестандартное имя для параметра «username», тогда используйте request.getParameter («[custom_param_name]»).

Ok, поэтому вы пытаетесь получить имя пользователя после того, как Spring Security перенаправляет обратно на страницу входа для неудачной аутентификации.,Какую версию Spring Security вы используете?Если до 3.1.0 вы можете получить его из атрибута сеанса SPRING_SECURITY_LAST_USERNAME.Если нет, вы можете реализовать AuthenticationFailureHandler для кэширования его в сеансе.Подробнее см .: Возвращение имени пользователя и пароля для входа в систему Grails Spring Security

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...