Статьи

Пример реализации настроенного выхода пользователя Spring MVC

В этом посте описывается, как реализовать настраиваемый пользовательский доступ к веб-приложению Spring MVC (выход из системы). В качестве предварительного условия читателям рекомендуется прочитать этот пост, в котором представлены некоторые концепции Spring Security.

Пример кода доступен на Github в каталоге Spring-MVC-Login-Logout. Он получен из Spring MVC с примером аннотаций.

Индивидуальный поставщик аутентификации

Для реализации нашего собственного способа приема пользовательских запросов на вход в систему нам необходимо реализовать поставщик аутентификации. Следующее позволяет пользователям войти, если их идентификатор идентичен их паролям:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class MyAuthenticationProvider implements AuthenticationProvider {
 
    private static final List<GrantedAuthority> AUTHORITIES
        = new ArrayList<GrantedAuthority>();
 
    static {
        AUTHORITIES.add(new SimpleGrantedAuthority('ROLE_USER'));
        AUTHORITIES.add(new SimpleGrantedAuthority('ROLE_ANONYMOUS'));
    }
 
    @Override
    public Authentication authenticate(Authentication auth)
        throws AuthenticationException {
 
        if (auth.getName().equals(auth.getCredentials())) {
            return new UsernamePasswordAuthenticationToken(auth.getName(),
                auth.getCredentials(), AUTHORITIES);
        }
 
        throw new BadCredentialsException('Bad Credentials');
 
    }
 
    @Override
    public boolean supports(Class<?> authentication) {
         
        if ( authentication == null ) return false;
 
        return Authentication.class.isAssignableFrom(authentication);
    }
 
}


security.xml

Нам нужно создать файл security.xml:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
    <http>
        <intercept-url pattern='/*' access='ROLE_ANONYMOUS'/>
        <form-login
            default-target-url='/'
            always-use-default-target='true' />
        <anonymous />
        <logout />
    </http>
 
    <authentication-manager alias='authenticationManager'>
      <authentication-provider ref='myAuthenticationProvider' />
    </authentication-manager>
 
    <beans:bean id='myAuthenticationProvider'
      class='com.jverstry.LoginLogout.Authentication.MyAuthenticationProvider' />
    </beans:beans>

Вышеуказанное гарантирует, что все пользователи имеют анонимную роль для доступа к любой странице. После входа они перенаправляются на главную страницу. Если они не входят в систему, они автоматически считаются анонимными пользователями. Функция выхода также объявлена. Вместо того, чтобы заново внедрять колесо, мы используем предметы, поставляемые самой Spring

Главная страница

Мы реализуем главную страницу, отображающую имя пользователя, вошедшего в систему, а также ссылки для входа и выхода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!doctype html>
<html lang='en'>
<head>
  <meta charset='utf-8'>
  <title>Welcome To MVC Customized Login Logout!!!</title>
</head>
  <body>
    <h1>Spring MVC Customized Login Logout !!!</h1>
    Who is currently logged in? <c:out value='${CurrPrincipal}' /> !<br />
    <a href='<c:url value='/spring_security_login'/>'>Login</a
    <a href='<c:url value='/j_spring_security_logout'/>'>Logout</a>
  </body>
</html>


контроллер

Нам нужно предоставить текущее имя пользователя для входа в систему:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
@Controller
public class MyController {
 
    @RequestMapping(value = '/')
    public String home(Model model) {
 
        model.addAttribute('CurrPrincipal',
            SecurityContextHolder.getContext()
                .getAuthentication().getName());
 
        return 'index';
 
    }
 
}


Запуск примера

После компиляции можно начать пример с просмотра: http: // localhost: 9292 / spring-mvc-login-logout /. Будет отображаться следующее:

Войдите, используя тот же идентификатор и пароль:

Приложение возвращается в главное и отображает:

Больше Spring связанных постов здесь .

Приятного кодирования и не забудьте поделиться!

Справка: Пример реализации настроенного входа в систему Spring MVC от нашего партнера JCG Джерома Версринга из блога Технических заметок .