Как отобразить новое сообщение на странице входа в систему Spring Security - PullRequest
0 голосов
/ 20 мая 2019

Я использую Spring Security в своем веб-приложении.

@Configuration
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
@Qualifier(value = "loginServiceImpl")
private UserDetailsService userDetailsService;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService);
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.csrf().disable()
            .authorizeRequests()

            .antMatchers("/login**", "/resources/**", "/js/**", "/css/**")
            .permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll()
            .and().exceptionHandling().accessDeniedPage("/403");
}

@Bean
public RequestContextListener requestContextListener(){
    return new RequestContextListener();
}
}

и

@Service
public class LoginServiceImpl implements UserDetailsService {

@Autowired
private UserDao loginDao;

@Autowired
private HttpServletRequest request;

@Override
public UserDetails loadUserByUsername(String username) {
    try {
        final String ip = getClientIp(request);

        net.liyan.psc.main.entity.main.User user = loginDao.findByUserNameForLogin(username);
        if (user == null) throw new UsernameNotFoundException("User not found.");
        Set<GrantedAuthority> grantedAuthorities = new HashSet<>();

        if (isLocalZone(ip)) {
            grantedAuthorities.add(new SimpleGrantedAuthority("ROLE"));
        } else {
            // invalid IP
            throw new Exception("Invalid IP.");
        }
        return new org.springframework.security.core.userdetails.User(
                user.getUsername(),
                user.getPassword(),
                true,
                true,
                true,
                true,
                grantedAuthorities);
    } catch (Exception ex) {
        throw new UsernameNotFoundException("User not found.");
    }
}

private static String getClientIp(HttpServletRequest request) {
    // ...
}

boolean isLocalZone(String ip) {
    //...
}
}

и loginController

@RequestMapping("/login")
public String loginForm(@ModelAttribute User users, ModelMap model,
                           @RequestParam(value = "error", required = false) String error,
                           @RequestParam(value = "logout", required = false) String logout) {
        String message = "";
        if (error != null) {
            message = URLDecoder.decode(Constant.LoginErrorMessage, "UTF-8");
        } else if (logout != null) {
            //message = "Logout successful !";
            message = "";
        }
        model.addAttribute("message", message);

        return "login";
}

, если я пытаюсь войти в систему с неверным именем пользователя ипароль, он идет в loginForm () с ошибкой = "", и если я снова пытаюсь войти в систему с недействительным IP-адресом, он идет в loginForm () с ошибкой = "", как я могу сделать разные между двумя состояниями?Можно ли установить значение для ошибки или добавить новый параметр, если IP недействителен?

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