For later versions of the Pentaho BI server (I did this in CE 9.4.0.0-343 to be exact), the answer given by @Marlon is still valid, just some minor differences are there.
The following points are exactly as given in his answer:
You need the following user to be created under the Manage Users & Roles Perspective:
anonymousUser (notice the uppercase U)
You can give this user any password; this is only to make sure this user maps the user used in the configuration files inside pentaho-solutions/system
Make sure the Anonymous role has at least the Read Permission.
The Anonymous role should exist already in the BA Server (this is by default a system role in the Manage Users and Roles Perspective)
Under Public create a folder: in my case "OpenReports"
Select the "OpenReports" folder click properties > click Share > Uncheck > Inherits folder permissions
Make sure to add anonymousUser and role anonymous to it and they at least the Read permission
Click OK
Copy an Analyzer report to the new OpenReports folder
Verify the permissions for anonymousUser and Anonymous role were inherited; if not add them accordingly.
Stop BA Server
Locate the following file:
\pentaho\server\biserver-ee\pentaho-solutions\system\applicationContext-spring-security.xml
In the bean definition
<bean id="filterInvocationInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
....
<property name="securityMetadataSource">
Search for the lines
<sec:intercept-url pattern="\A/[^\?]*(require)(-js)?(-cfg)?.js(\?.*)?\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/content/data-access/resources/gwt/.*css\Z" access="Anonymous,Authenticated" />
In my version (9.4.0.0-343), these are lines 313 & 314.
Add the following lines between these two lines:
<sec:intercept-url pattern="\A/i18n.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/js/utils.js\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/.*require-js-cfg.js\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/repos.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/common-ui/resources/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/common-ui/util/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/repos.*public.*openreports.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/repos.*public.*openreports.*/viewer/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/repos.*public.*openreports.*/common-ui/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/api/repos.*public.*openreports.*/common-ui/util/.*\Z" access="Anonymous,Authenticated" />
And just between the following 2 lines (line numbers 314 & 315 in the original, which would have been moved due to above addition),
<sec:intercept-url pattern="\A/content/data-access/resources/gwt/.*css\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/webcontext.js.*\Z" access="Anonymous,Authenticated" />
Add the following lines:
<sec:intercept-url pattern="\A/content/pentaho-cdf/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/content/common-ui/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/content/analyzer/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/content/analyzer/scripts/.*\Z" access="Anonymous,Authenticated" />
And then in the bean definition:
<bean id="filterInvocationInterceptorForWS" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
....
<property name="securityMetadataSource">
Replace the following two lines:
<sec:intercept-url pattern="\A/api/.*\Z" access="Authenticated" />
<sec:intercept-url pattern="\A/plugin/.*\Z" access="Authenticated" />
With
<sec:intercept-url pattern="\A/api/.*\Z" access="Anonymous,Authenticated" />
<sec:intercept-url pattern="\A/plugin/.*\Z" access="Anonymous,Authenticated" />
I.e. just add Anonymous,
in the access
attribute.
That's it. Start the Pentaho server again, and you should be able to access all the reports under Public/OpenReports/
folder without any login.