Spring-Boot пропустить безопасность и перейти на домашнюю страницу - PullRequest
0 голосов
/ 04 июня 2019

Я делаю поиск в LDap-каталоге.Если пользователь успешно аутентифицирован.Я хочу пропустить аутентификацию и перейти на домашнюю страницу.Можем ли мы сделать это в Spring-boot?

Это не типичный Ldap-логин.У моего Ldap нет переменной для пароля.Я не нашел другого пути.Я должен искать идентификатор пользователя в ldap sub-three.Если идентификатор пользователя существует, то пользователь может войти в систему.

    @Override
        protected void configure(HttpSecurity http) throws Exception {
            String baseDN = "OU=ACCOUNTS,OU=MYGRUPPE,DC=MYGRUPPE,DC=COM";
            String filter = "(&(objectClass=person)(UserLoginVariable=010101))";
            LDAPConnection connection = getConnection();

            http.authorizeRequests().anyRequest().authenticated().and().formLogin().permitAll().and().addFilterBefore(new Filter() {

                @Override
                public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                        throws IOException, ServletException {
                    if (request.getParameter("username") != null && request.getParameter("password") != null) {
                        try {
                            List<SearchResultEntry> results = getResults(connection, baseDN, filter);
                            for (SearchResultEntry searchResultEntry : results) {
                                boolean control = userAuthentication(searchResultEntry.getAttributeValue("cn"),
                                        request.getParameter("password"));

                                if (control) {
                                    //FIXME
                                    //Userfound operation successful!;
                                    //Go Homepage
                                }
                            }
                        } catch (LDAPSearchException e) {
                            e.printStackTrace();
                        }
                    }
                    chain.doFilter(request, response);
                }
            }, UsernamePasswordAuthenticationFilter.class);
        }

        public LDAPConnection getConnection() throws LDAPException {
            LDAPConnection con = new LDAPConnection("mygruppe.com", 389);
            con.bind("CN=testuser,OU=ACCOUNTS,OU=MYGRUPPE,DC=MYGRUPPE,DC=COM",
                    "password");
            return con;
        }

        public List<SearchResultEntry> getResults(LDAPConnection connection, String baseDN, String filter)
                throws LDAPSearchException {
            SearchResult searchResult;
searchResult = connection.search(baseDN, SearchScope.ONE, filter);
                return searchResult.getSearchEntries();

        }

        public boolean userAuthentication(String userName, String password) {
            Hashtable<String, String> authEnv = new Hashtable<String, String>();

            String base = "OU=ACCOUNTS,OU=MYGRUPPE,DC=MYGRUPPE,DC=COM";
            String dn = "CN=" + userName + "," + base;
            String ldapURL = "ldap://ldapserver:389";

            authEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            authEnv.put(Context.PROVIDER_URL, ldapURL);
            authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
            authEnv.put(Context.SECURITY_PRINCIPAL, dn);
            authEnv.put(Context.SECURITY_CREDENTIALS, password);

            try {
                DirContext authContext = new InitialDirContext(authEnv);
                authContext.close();
                return true;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...