Signed-off-by: Andrew DeMaria <lostonamountain@gmail.com>master
							parent
							
								
									6896538a6f
								
							
						
					
					
						commit
						a3c64d2024
					
				| @ -1,132 +0,0 @@ | ||||
| /* | ||||
|  This file is part of Libresonic. | ||||
| 
 | ||||
|  Libresonic is free software: you can redistribute it and/or modify | ||||
|  it under the terms of the GNU General Public License as published by | ||||
|  the Free Software Foundation, either version 3 of the License, or | ||||
|  (at your option) any later version. | ||||
| 
 | ||||
|  Libresonic is distributed in the hope that it will be useful, | ||||
|  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  GNU General Public License for more details. | ||||
| 
 | ||||
|  You should have received a copy of the GNU General Public License | ||||
|  along with Libresonic.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| 
 | ||||
|  Copyright 2016 (C) Libresonic Authors | ||||
|  Based upon Subsonic, Copyright 2009 (C) Sindre Mehus | ||||
|  */ | ||||
| package org.libresonic.player.ldap; | ||||
| 
 | ||||
| import org.libresonic.player.Logger; | ||||
| import org.libresonic.player.domain.User; | ||||
| import org.libresonic.player.service.SecurityService; | ||||
| import org.libresonic.player.service.SettingsService; | ||||
| import org.acegisecurity.BadCredentialsException; | ||||
| import org.acegisecurity.ldap.DefaultInitialDirContextFactory; | ||||
| import org.acegisecurity.ldap.search.FilterBasedLdapUserSearch; | ||||
| import org.acegisecurity.providers.ldap.LdapAuthenticator; | ||||
| import org.acegisecurity.providers.ldap.authenticator.BindAuthenticator; | ||||
| import org.acegisecurity.userdetails.ldap.LdapUserDetails; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| /** | ||||
|  * LDAP authenticator which uses a delegate {@link BindAuthenticator}, and which | ||||
|  * supports dynamically changing LDAP provider URL and search filter. | ||||
|  * | ||||
|  * @author Sindre Mehus | ||||
|  */ | ||||
| public class LibresonicLdapBindAuthenticator implements LdapAuthenticator { | ||||
| 
 | ||||
|     private static final Logger LOG = Logger.getLogger(LibresonicLdapBindAuthenticator.class); | ||||
| 
 | ||||
|     private SecurityService securityService; | ||||
|     private SettingsService settingsService; | ||||
| 
 | ||||
|     private long authenticatorTimestamp; | ||||
|     private BindAuthenticator delegateAuthenticator; | ||||
| 
 | ||||
|     public LdapUserDetails authenticate(String username, String password) { | ||||
| 
 | ||||
|         // LDAP authentication must be enabled on the system.
 | ||||
|         if (!settingsService.isLdapEnabled()) { | ||||
|             throw new BadCredentialsException("LDAP authentication disabled."); | ||||
|         } | ||||
| 
 | ||||
|         // User must be defined in Libresonic, unless auto-shadowing is enabled.
 | ||||
|         User user = securityService.getUserByName(username); | ||||
|         if (user == null && !settingsService.isLdapAutoShadowing()) { | ||||
|             throw new BadCredentialsException("User does not exist."); | ||||
|         } | ||||
| 
 | ||||
|         // LDAP authentication must be enabled for the given user.
 | ||||
|         if (user != null && !user.isLdapAuthenticated()) { | ||||
|             throw new BadCredentialsException("LDAP authentication disabled for user."); | ||||
|         } | ||||
| 
 | ||||
|         try { | ||||
|             createDelegate(); | ||||
|             LdapUserDetails details = delegateAuthenticator.authenticate(username, password); | ||||
|             if (details != null) { | ||||
|                 LOG.info("User '" + username + "' successfully authenticated in LDAP. DN: " + details.getDn()); | ||||
| 
 | ||||
|                 if (user == null) { | ||||
|                     User newUser = new User(username, "", null, true, 0L, 0L, 0L); | ||||
|                     newUser.setStreamRole(true); | ||||
|                     newUser.setSettingsRole(true); | ||||
|                     securityService.createUser(newUser); | ||||
|                     LOG.info("Created local user '" + username + "' for DN " + details.getDn()); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             return details; | ||||
|         } catch (RuntimeException x) { | ||||
|             LOG.info("Failed to authenticate user '" + username + "' in LDAP.", x); | ||||
|             throw x; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Creates the delegate {@link BindAuthenticator}. | ||||
|      */ | ||||
|     private synchronized void createDelegate() { | ||||
| 
 | ||||
|         // Only create it if necessary.
 | ||||
|         if (delegateAuthenticator == null || authenticatorTimestamp < settingsService.getSettingsChanged()) { | ||||
| 
 | ||||
|             DefaultInitialDirContextFactory contextFactory = new DefaultInitialDirContextFactory(settingsService.getLdapUrl()); | ||||
| 
 | ||||
|             String managerDn = settingsService.getLdapManagerDn(); | ||||
|             String managerPassword = settingsService.getLdapManagerPassword(); | ||||
|             if (StringUtils.isNotEmpty(managerDn) && StringUtils.isNotEmpty(managerPassword)) { | ||||
|                 contextFactory.setManagerDn(managerDn); | ||||
|                 contextFactory.setManagerPassword(managerPassword); | ||||
|             } | ||||
| 
 | ||||
|             Map<String, String> extraEnvVars = new HashMap<String, String>(); | ||||
|             extraEnvVars.put("java.naming.referral", "follow"); | ||||
|             contextFactory.setExtraEnvVars(extraEnvVars); | ||||
| 
 | ||||
|             FilterBasedLdapUserSearch userSearch = new FilterBasedLdapUserSearch("", settingsService.getLdapSearchFilter(), contextFactory); | ||||
|             userSearch.setSearchSubtree(true); | ||||
|             userSearch.setDerefLinkFlag(true); | ||||
| 
 | ||||
|             delegateAuthenticator = new BindAuthenticator(contextFactory); | ||||
|             delegateAuthenticator.setUserSearch(userSearch); | ||||
| 
 | ||||
|             authenticatorTimestamp = settingsService.getSettingsChanged(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void setSecurityService(SecurityService securityService) { | ||||
|         this.securityService = securityService; | ||||
|     } | ||||
| 
 | ||||
|     public void setSettingsService(SettingsService settingsService) { | ||||
|         this.settingsService = settingsService; | ||||
|     } | ||||
| } | ||||
| @ -1,51 +0,0 @@ | ||||
| /* | ||||
|  This file is part of Libresonic. | ||||
| 
 | ||||
|  Libresonic is free software: you can redistribute it and/or modify | ||||
|  it under the terms of the GNU General Public License as published by | ||||
|  the Free Software Foundation, either version 3 of the License, or | ||||
|  (at your option) any later version. | ||||
| 
 | ||||
|  Libresonic is distributed in the hope that it will be useful, | ||||
|  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  GNU General Public License for more details. | ||||
| 
 | ||||
|  You should have received a copy of the GNU General Public License | ||||
|  along with Libresonic.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| 
 | ||||
|  Copyright 2016 (C) Libresonic Authors | ||||
|  Based upon Subsonic, Copyright 2009 (C) Sindre Mehus | ||||
|  */ | ||||
| package org.libresonic.player.ldap; | ||||
| 
 | ||||
| import org.acegisecurity.GrantedAuthority; | ||||
| import org.acegisecurity.ldap.LdapDataAccessException; | ||||
| import org.acegisecurity.providers.ldap.LdapAuthoritiesPopulator; | ||||
| import org.acegisecurity.userdetails.UserDetailsService; | ||||
| import org.acegisecurity.userdetails.UserDetails; | ||||
| import org.acegisecurity.userdetails.ldap.LdapUserDetails; | ||||
| 
 | ||||
| /** | ||||
|  * An {@link LdapAuthoritiesPopulator} that retrieves the roles from the | ||||
|  * database using the {@link UserDetailsService} instead of retrieving the roles | ||||
|  * from LDAP. An instance of this class can be configured for the | ||||
|  * {@link org.acegisecurity.providers.ldap.LdapAuthenticationProvider} when | ||||
|  * authentication should be done using LDAP and authorization using the | ||||
|  * information stored in the database. | ||||
|  * | ||||
|  * @author Thomas M. Hofmann | ||||
|  */ | ||||
| public class UserDetailsServiceBasedAuthoritiesPopulator implements LdapAuthoritiesPopulator { | ||||
| 
 | ||||
|     private UserDetailsService userDetailsService; | ||||
| 
 | ||||
|     public GrantedAuthority[] getGrantedAuthorities(LdapUserDetails userDetails) throws LdapDataAccessException { | ||||
|         UserDetails details = userDetailsService.loadUserByUsername(userDetails.getUsername()); | ||||
|         return details.getAuthorities(); | ||||
|     } | ||||
| 
 | ||||
|     public void setUserDetailsService(UserDetailsService userDetailsService) { | ||||
|         this.userDetailsService = userDetailsService; | ||||
|     } | ||||
| } | ||||
| @ -1,246 +1,65 @@ | ||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | ||||
| 
 | ||||
| <beans xmlns="http://www.springframework.org/schema/beans" | ||||
|        xmlns:security="http://www.springframework.org/schema/security" | ||||
|        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> | ||||
| 
 | ||||
|     <bean id="loginFailureLogger" class="org.libresonic.player.security.LoginFailureLogger"/> | ||||
| 
 | ||||
|     <bean class="org.libresonic.player.security.LibresonicApplicationEventListener"> | ||||
|         <property name="loginFailureLogger" ref="loginFailureLogger"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> | ||||
|         <property name="filterInvocationDefinitionSource"> | ||||
|             <value> | ||||
|                 PATTERN_TYPE_APACHE_ANT | ||||
|                 /wap**=httpSessionContextIntegrationFilter,logoutFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,basicExceptionTranslationFilter,filterInvocationInterceptor | ||||
|                 /podcastChannel**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor | ||||
|                 /podcast**=httpSessionContextIntegrationFilter,logoutFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,basicExceptionTranslationFilter,filterInvocationInterceptor | ||||
|                 /rest/**=httpSessionContextIntegrationFilter,logoutFilter,basicProcessingFilter,restRequestParameterProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,basicExceptionTranslationFilter,filterInvocationInterceptor | ||||
|                 /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor | ||||
|             </value> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/> | ||||
| 
 | ||||
|     <bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter"> | ||||
|         <constructor-arg value="/login.view?logout"/> | ||||
|         <!-- URL redirected to after logout --> | ||||
|         <constructor-arg> | ||||
|             <list> | ||||
|                 <ref bean="rememberMeServices"/> | ||||
|                 <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/> | ||||
|             </list> | ||||
|         </constructor-arg> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> | ||||
|         <property name="authenticationManager" ref="authenticationManager"/> | ||||
|         <property name="authenticationFailureUrl" value="/login.view?error"/> | ||||
|         <property name="defaultTargetUrl" value="/"/> | ||||
|         <property name="alwaysUseDefaultTargetUrl" value="true"/> | ||||
|         <property name="filterProcessesUrl" value="/j_acegi_security_check"/> | ||||
|         <property name="rememberMeServices" ref="rememberMeServices"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter"> | ||||
|         <property name="authenticationManager" ref="authenticationManager"/> | ||||
|         <property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="restRequestParameterProcessingFilter" class="org.libresonic.player.security.RESTRequestParameterProcessingFilter"> | ||||
|         <property name="authenticationManager" ref="authenticationManager"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="loginFailureLogger" ref="loginFailureLogger"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="basicProcessingFilterEntryPoint" class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint"> | ||||
|         <property name="realmName" value="Libresonic"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/> | ||||
| 
 | ||||
|     <bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter"> | ||||
|         <property name="authenticationManager" ref="authenticationManager"/> | ||||
|         <property name="rememberMeServices" ref="rememberMeServices"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter"> | ||||
|         <property name="key" value="libresonic"/> | ||||
|         <property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"> | ||||
|         <property name="authenticationEntryPoint"> | ||||
|             <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> | ||||
|                 <property name="loginFormUrl" value="/login.view?"/> | ||||
|                 <property name="forceHttps" value="false"/> | ||||
|             </bean> | ||||
|         </property> | ||||
|         <property name="accessDeniedHandler"> | ||||
|             <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl"> | ||||
|                 <property name="errorPage" value="/accessDenied.view"/> | ||||
|             </bean> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="basicExceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"> | ||||
|         <property name="authenticationEntryPoint"> | ||||
|             <bean class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint"> | ||||
|                 <property name="realmName" value="Libresonic"/> | ||||
|             </bean> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"> | ||||
|         <property name="authenticationManager" ref="authenticationManager"/> | ||||
|         <property name="alwaysReauthenticate" value="true"/> | ||||
|         <property name="accessDecisionManager" ref="accessDecisionManager"/> | ||||
|         <property name="objectDefinitionSource"> | ||||
|             <value> | ||||
|                 PATTERN_TYPE_APACHE_ANT | ||||
| 
 | ||||
|                 /login.view=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /recover.view=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /accessDenied.view=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /coverArt.view=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /hls/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /stream/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /ws/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /share/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /style/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /icons/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /flash/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /script/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /sonos/**=IS_AUTHENTICATED_ANONYMOUSLY | ||||
|                 /crossdomain.xml=IS_AUTHENTICATED_ANONYMOUSLY | ||||
| 
 | ||||
|                 /personalSettings.view=ROLE_SETTINGS | ||||
|                 /passwordSettings.view=ROLE_SETTINGS | ||||
|                 /playerSettings.view=ROLE_SETTINGS | ||||
|                 /shareSettings.view=ROLE_SETTINGS | ||||
| 
 | ||||
|                 /generalSettings.view=ROLE_ADMIN | ||||
|                 /advancedSettings.view=ROLE_ADMIN | ||||
|                 /userSettings.view=ROLE_ADMIN | ||||
|                 /musicFolderSettings.view=ROLE_ADMIN | ||||
|                 /networkSettings.view=ROLE_ADMIN | ||||
|                 /dlnaSettings.view=ROLE_ADMIN | ||||
|                 /sonosSettings.view=ROLE_ADMIN | ||||
|                 /transcodingSettings.view=ROLE_ADMIN | ||||
|                 /internetRadioSettings.view=ROLE_ADMIN | ||||
|                 /podcastSettings.view=ROLE_ADMIN | ||||
|                 /db.view=ROLE_ADMIN | ||||
| 
 | ||||
|                 /deletePlaylist.view=ROLE_PLAYLIST | ||||
|                 /savePlaylist.view=ROLE_PLAYLIST | ||||
| 
 | ||||
|                 /download.view=ROLE_DOWNLOAD | ||||
| 
 | ||||
|                 /upload.view=ROLE_UPLOAD | ||||
| 
 | ||||
|                 /createShare.view=ROLE_SHARE | ||||
| 
 | ||||
|                 /changeCoverArt.view=ROLE_COVERART | ||||
|                 /editTags.view=ROLE_COVERART | ||||
| 
 | ||||
|                 /setMusicFileInfo.view=ROLE_COMMENT | ||||
| 
 | ||||
|                 /podcastReceiverAdmin.view=ROLE_PODCAST | ||||
| 
 | ||||
|                 /**=IS_AUTHENTICATED_REMEMBERED | ||||
|             </value> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> | ||||
|         <property name="allowIfAllAbstainDecisions" value="false"/> | ||||
|         <property name="decisionVoters"> | ||||
|             <list> | ||||
|                 <bean class="org.acegisecurity.vote.RoleVoter"/> | ||||
|                 <bean class="org.acegisecurity.vote.AuthenticatedVoter"/> | ||||
|             </list> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices"> | ||||
|         <property name="userDetailsService" ref="securityService"/> | ||||
|         <property name="tokenValiditySeconds" value="31536000"/> | ||||
|         <!-- One year --> | ||||
|         <property name="key" value="libresonic"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> | ||||
|         <property name="providers"> | ||||
|             <list> | ||||
|                 <ref local="daoAuthenticationProvider"/> | ||||
|                 <ref local="ldapAuthenticationProvider"/> | ||||
|                 <bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider"> | ||||
|                     <property name="key" value="libresonic"/> | ||||
|                 </bean> | ||||
|                 <bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider"> | ||||
|                     <property name="key" value="libresonic"/> | ||||
|                 </bean> | ||||
|             </list> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> | ||||
|         <property name="userDetailsService" ref="securityService"/> | ||||
|         <property name="userCache" ref="userCacheWrapper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="userCacheWrapper" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache"> | ||||
|         <property name="cache" ref="userCache"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="ldapAuthenticationProvider" class="org.acegisecurity.providers.ldap.LdapAuthenticationProvider"> | ||||
|         <constructor-arg ref="bindAuthenticator"/> | ||||
|         <constructor-arg ref="userDetailsServiceBasedAuthoritiesPopulator"/> | ||||
|         <property name="userCache" ref="userCacheWrapper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="bindAuthenticator" class="org.libresonic.player.ldap.LibresonicLdapBindAuthenticator"> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="userDetailsServiceBasedAuthoritiesPopulator" | ||||
|           class="org.libresonic.player.ldap.UserDetailsServiceBasedAuthoritiesPopulator"> | ||||
|         <property name="userDetailsService" ref="securityService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <!-- Authorization of AJAX services. --> | ||||
|     <bean id="ajaxServiceInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> | ||||
|         <property name="authenticationManager" ref="authenticationManager"/> | ||||
|         <property name="accessDecisionManager" ref="accessDecisionManager"/> | ||||
|         <property name="objectDefinitionSource"> | ||||
|             <value> | ||||
|                 org.libresonic.player.ajax.TagService.setTags=ROLE_COVERART | ||||
|                 org.libresonic.player.ajax.TransferService.getUploadInfo=ROLE_UPLOAD | ||||
|             </value> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="ajaxTagServiceSecure" class="org.springframework.aop.framework.ProxyFactoryBean"> | ||||
|         <property name="target" ref="ajaxTagService"/> | ||||
|         <property name="interceptorNames"> | ||||
|             <list> | ||||
|                 <idref local="ajaxServiceInterceptor"/> | ||||
|             </list> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="ajaxTransferServiceSecure" class="org.springframework.aop.framework.ProxyFactoryBean"> | ||||
|         <property name="target" ref="ajaxTransferService"/> | ||||
|         <property name="interceptorNames"> | ||||
|             <list> | ||||
|                 <idref local="ajaxServiceInterceptor"/> | ||||
|             </list> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
| </beans> | ||||
|        xsi:schemaLocation="http://www.springframework.org/schema/beans | ||||
|           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd | ||||
|           http://www.springframework.org/schema/security | ||||
|           http://www.springframework.org/schema/security/spring-security-3.2.xsd"> | ||||
| 
 | ||||
|     <security:http auto-config='true'> | ||||
|         <!-- IS_AUTHENTICATED_ANONYMOUSLY --> | ||||
|         <security:intercept-url pattern="/login.*" access="IS_AUTHENTICATED_ANONYMOUSLY"/> | ||||
|         <security:intercept-url pattern="/recover.view" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/accessDenied.view" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/coverArt.view" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/hls/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/stream/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/ws/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/share/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/style/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/icons/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/flash/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/script/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/sonos/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
|         <security:intercept-url pattern="/crossdomain.xml" access="IS_AUTHENTICATED_ANONYMOUSLY" /> | ||||
| 
 | ||||
|         <!-- ROLE_SETTINGS --> | ||||
|         <security:intercept-url pattern="/personalSettings.view" access="ROLE_SETTINGS" /> | ||||
|         <security:intercept-url pattern="/passwordSettings.view" access="ROLE_SETTINGS" /> | ||||
|         <security:intercept-url pattern="/playerSettings.view" access="ROLE_SETTINGS" /> | ||||
|         <security:intercept-url pattern="/shareSettings.view" access="ROLE_SETTINGS" /> | ||||
| 
 | ||||
|         <!-- ROLE_ADMIN --> | ||||
|         <security:intercept-url pattern="/generalSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/advancedSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/userSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/musicFolderSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/networkSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/dlnaSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/sonosSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/transcodingSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/internetRadioSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/podcastSettings.view" access="ROLE_ADMIN" /> | ||||
|         <security:intercept-url pattern="/db.view" access="ROLE_ADMIN" /> | ||||
| 
 | ||||
|         <!-- MISC --> | ||||
|         <security:intercept-url pattern="/deletePlaylist.view" access="ROLE_PLAYLIST" /> | ||||
|         <security:intercept-url pattern="/savePlaylist.view" access="ROLE_PLAYLIST" /> | ||||
|         <security:intercept-url pattern="/download.view" access="ROLE_DOWNLOAD" /> | ||||
|         <security:intercept-url pattern="/upload.view" access="ROLE_UPLOAD" /> | ||||
|         <security:intercept-url pattern="/createShare.view" access="ROLE_SHARE" /> | ||||
|         <security:intercept-url pattern="/changeCoverArt.view" access="ROLE_COVERART" /> | ||||
|         <security:intercept-url pattern="/editTags.view" access="ROLE_COVERART" /> | ||||
|         <security:intercept-url pattern="/setMusicFileInfo.view" access="ROLE_COMMENT" /> | ||||
|         <security:intercept-url pattern="/podcastReceiverAdmin.view" access="ROLE_PODCAST" /> | ||||
| 
 | ||||
|         <!-- ROLE_USER --> | ||||
|         <security:intercept-url pattern="/**" access="ROLE_USER" /> | ||||
|         <security:form-login login-page="/login.view" default-target-url="/home.view" /> | ||||
|     </security:http> | ||||
| 
 | ||||
|     <security:authentication-manager> | ||||
|         <security:authentication-provider user-service-ref="securityService" /> | ||||
|     </security:authentication-manager> | ||||
| </beans> | ||||
|  | ||||
					Loading…
					
					
				
		Reference in new issue