⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jaasauthenticationprovider.java

📁 acegi构造安全的java系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }        }        return null;    }    /**     * Hook method for configuring Jaas     *     * @param loginConfig URL to Jaas login configuration     *     * @throws IOException if there is a problem reading the config resource.     */    protected void configureJaas(Resource loginConfig) throws IOException {        configureJaasUsingLoop();    }    /**     * Loops through the login.config.url.1,login.config.url.2 properties looking for the login configuration.     * If it is not set, it will be set to the last available login.config.url.X property.     *     */    private void configureJaasUsingLoop() throws IOException {        String loginConfigUrl = loginConfig.getURL().toString();        boolean alreadySet = false;        int n = 1;        String prefix = "login.config.url.";        String existing = null;        while ((existing = Security.getProperty(prefix + n)) != null) {            alreadySet = existing.equals(loginConfigUrl);            if (alreadySet) {                break;            }            n++;        }        if (!alreadySet) {            String key = prefix + n;            log.debug("Setting security property [" + key + "] to: " + loginConfigUrl);            Security.setProperty(key, loginConfigUrl);        }    }    /**     * Returns the AuthorityGrannter array that was passed to the {@link     * #setAuthorityGranters(AuthorityGranter[])} method, or null if it none were ever set.     *     * @return The AuthorityGranter array, or null     *     * @see #setAuthorityGranters(AuthorityGranter[])     */    public AuthorityGranter[] getAuthorityGranters() {        return authorityGranters;    }    /**     * Returns the current JaasAuthenticationCallbackHandler array, or null if none are set.     *     * @return the JAASAuthenticationCallbackHandlers.     *     * @see #setCallbackHandlers(JaasAuthenticationCallbackHandler[])     */    public JaasAuthenticationCallbackHandler[] getCallbackHandlers() {        return callbackHandlers;    }    public Resource getLoginConfig() {        return loginConfig;    }    public String getLoginContextName() {        return loginContextName;    }    public LoginExceptionResolver getLoginExceptionResolver() {        return loginExceptionResolver;    }    /**     * Handles the logout by getting the SecurityContext for the session that was destroyed. <b>MUST NOT use     * SecurityContextHolder we are logging out a session that is not related to the current user.</b>     *     * @param event     */    protected void handleLogout(HttpSessionDestroyedEvent event) {        SecurityContext context = (SecurityContext)                event.getSession().getAttribute(HttpSessionContextIntegrationFilter.ACEGI_SECURITY_CONTEXT_KEY);        if (context == null) {            log.debug("The destroyed session has no SecurityContext");            return;        }        Authentication auth = context.getAuthentication();        if ((auth != null) && (auth instanceof JaasAuthenticationToken)) {            JaasAuthenticationToken token = (JaasAuthenticationToken) auth;            try {                LoginContext loginContext = token.getLoginContext();                if (loginContext != null) {                    log.debug("Logging principal: [" + token.getPrincipal() + "] out of LoginContext");                    loginContext.logout();                } else {                    log.debug("Cannot logout principal: [" + token.getPrincipal() + "] from LoginContext. "                        + "The LoginContext is unavailable");                }            } catch (LoginException e) {                log.warn("Error error logging out of LoginContext", e);            }        }    }    public void onApplicationEvent(ApplicationEvent applicationEvent) {        if (applicationEvent instanceof HttpSessionDestroyedEvent) {            HttpSessionDestroyedEvent event = (HttpSessionDestroyedEvent) applicationEvent;            handleLogout(event);        }    }    /**     * Publishes the {@link JaasAuthenticationFailedEvent}. Can be overridden by subclasses for different     * functionality     *     * @param token The {@link UsernamePasswordAuthenticationToken} being processed     * @param ase The {@link AcegiSecurityException} that caused the failure     */    protected void publishFailureEvent(UsernamePasswordAuthenticationToken token, AcegiSecurityException ase) {        applicationEventPublisher.publishEvent(new JaasAuthenticationFailedEvent(token, ase));    }    /**     * Publishes the {@link JaasAuthenticationSuccessEvent}. Can be overridden by subclasses for different     * functionality.     *     * @param token The {@link UsernamePasswordAuthenticationToken} being processed     */    protected void publishSuccessEvent(UsernamePasswordAuthenticationToken token) {        applicationEventPublisher.publishEvent(new JaasAuthenticationSuccessEvent(token));    }    /**     * Set the AuthorityGranters that should be consulted for role names to be granted to the Authentication.     *     * @param authorityGranters AuthorityGranter array     *     * @see JaasAuthenticationProvider     */    public void setAuthorityGranters(AuthorityGranter[] authorityGranters) {        this.authorityGranters = authorityGranters;    }    /**     * Set the JAASAuthentcationCallbackHandler array to handle callback objects generated by the     * LoginContext.login method.     *     * @param callbackHandlers Array of JAASAuthenticationCallbackHandlers     */    public void setCallbackHandlers(JaasAuthenticationCallbackHandler[] callbackHandlers) {        this.callbackHandlers = callbackHandlers;    }    /**     * Set the JAAS login configuration file.     *     * @param loginConfig <a     *        href="http://www.springframework.org/docs/api/org/springframework/core/io/Resource.html">Spring     *        Resource</a>     *     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASRefGuide.html">JAAS Reference</a>     */    public void setLoginConfig(Resource loginConfig) {        this.loginConfig = loginConfig;    }    /**     * Set the loginContextName, this name is used as the index to the configuration specified in the     * loginConfig property.     *     * @param loginContextName     */    public void setLoginContextName(String loginContextName) {        this.loginContextName = loginContextName;    }    public void setLoginExceptionResolver(LoginExceptionResolver loginExceptionResolver) {        this.loginExceptionResolver = loginExceptionResolver;    }    public boolean supports(Class aClass) {        return UsernamePasswordAuthenticationToken.class.isAssignableFrom(aClass);    }    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {        this.applicationEventPublisher = applicationEventPublisher;    }    protected ApplicationEventPublisher getApplicationEventPublisher() {        return applicationEventPublisher;    }    //~ Inner Classes ==================================================================================================    /**     * Wrapper class for JAASAuthenticationCallbackHandlers     */    private class InternalCallbackHandler implements CallbackHandler {        private Authentication authentication;        public InternalCallbackHandler(Authentication authentication) {            this.authentication = authentication;        }        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {            for (int i = 0; i < callbackHandlers.length; i++) {                JaasAuthenticationCallbackHandler handler = callbackHandlers[i];                for (int j = 0; j < callbacks.length; j++) {                    Callback callback = callbacks[j];                    handler.handle(callback, authentication);                }            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -