Spring mvc 3.1, трудности с входом и сессионным компонентом - PullRequest
0 голосов
/ 24 февраля 2012

После того, как пользователь вошел в систему из браузера A,

браузер B загружает тот же пользовательский компонент, что и браузер A, поэтому браузер B автоматически входит в систему.вместо пружинной безопасности.

Что это исправить?

Заранее спасибо.Вот код

LoginInterceptor

public class LoginInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private UserBean userBean;

    public boolean preHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler) throws Exception {

        String contextPath = request.getContextPath();
        String requestURI = request.getRequestURI();
        Boolean matched = requestURI.contains(contextPath + "/login");
        if (matched || userBean.getLogined()) {
            return true;
        } else {            
            response.sendRedirect(contextPath + "/login");
            return false;
        }
    }
}

LoginController

@Controller
@RequestMapping("login")
public class LoginController {

    @Autowired
    private UserBean userBean;

    @RequestMapping(method = RequestMethod.GET)
    public String loginGET(Model model) {
        LoginInput loginInput = new LoginInput();
        model.addAttribute("login", loginInput);
        return "login";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String loginPOST(@Valid LoginInput loginInput, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "login";
        }       
        Boolean logined = userBean.login(loginInput.getUserName(), loginInput.getPassword());
        if (!logined) {
            result.rejectValue("userName", "IncorrectLogin", "Incorrect login or password!");
            return "login";
        }       
        return "redirect:/index";
    }
}

LoginInput

public class LoginInput {
    @NotEmpty
    @Size(min = 1, max = 50)
    private String userName;
    @NotEmpty(message = "Password must not be blank.")
    @Size(min = 4, max = 20, message = "Password must between 4 to 20 Characters.")
    private String password;

    public void setUserName(String userName) {
            this.userName = userName;
    }
    public String getUserName() {
            return userName;
    }
    public void setPassword(String password) {
            this.password = password;
    }
    public String getPassword() {
            return password;
    }

AppConfig

@Configuration
public class AppConfig {
    @Bean @Scope("singleton")
    public LdapService ldapService() throws LDAPException {
        return new LdapService();
    }

    @Bean @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public UserBean userBean() {
        return new UserBean();
    }

    @Bean @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public UserConfig userConfig() {
        return new UserConfig();
    }
}

1 Ответ

0 голосов
/ 07 сентября 2012

К сожалению, это не может работать. Ваш UserBean объекты имеют сессионную область. Поэтому, когда пользователь использует другой браузер, ему будет создан новый сеанс (и другой UserBean)

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