Capture HTTP Header in Report

I'm trying to find a way to capture HTTP headers in my report. Does anyone have any experience doing such a thing?
TIA
Brian.

I found this and what I'm looking for is REMOTE_USER parameter under HTTP Environment Variables. http://servername/reports/rwservlet/showenv
I've tried simply putting a variable named REMOTE_USER in my report and that didn't work. Is there a setting in IAS that we can add this to the available report parameters?
Additionally, I've tried using the packge owa_util.get_cgi_env('REMOTE_USER') to grab that variable, and I keep getting a - PL/SQL: numeric or value error - error. Not sure why since the specs show it returns a varchar2
Any suggestions appreciated.

Similar Messages

  • SSRS web services 401 if you pass "Authorization" http header

    We use both SSRS 2008 R2 and 2012. When i access a report using url access (direct ssrs server hit) and add a "Authorization: Bearer xyzelkalklsjsdfalsjdf" http header, i get a 401 from somewhere in the request pipeline. I have a custom httpmodule
    registered at the top of the chain which does some OAuth related security checks. But when this header is included, the request never reaches the httpmodule. If i change the header slightly ex: "YAuthorization: ljlxzcvc..", then the request reaches
    the httpmodule and everything works. So obviously SSRS is looking for a particular header named "Authorization" and does something with it. Point to note: we have implemented a custom forms authentication module and we are doing some rich authorization
    using the extensible ssrs api. 
    Now my questions are:
    1. What is happening here? Who is acting on my request before my HttpModule registered on top in ssrs\reporting service\web.config gets it?
    2. How do i ensure my httpmodule executes before whatever component is terminating my request with a 401

    Sorry if this sounds like I am new to this but I am.
    So, the extended version is the format that would be used if you were not utilizing the files that the wsdl2java function creates?
    And this is done to when you want more flexibiility for the user to call your service?
    So, you would push to have the stub files used when you want to control how the web service is used?
    thanks for the feedback.

  • ACE: wrong IP in HTTP header HEALTHCHECK packet

    Hi,
    I encounter a strange problem with ACE when the blade performs a HTTP healthcheck towards a RSERVER.
    Sometimes, ACE insert in the HTTP header a strange IP address, others then the IP address of the rserver, for which it performs a healthcheck.
    Anyone encountered the same problem?
    Thx, Wim

    Hi Gillis,
    I reported this issue to our integrator. I think they will open a cisco case right now.
    We are able to reproduce this problem. So, that might not be the problem to troubleshoot at this moment.
    For your information, we had version A1.6 running until last week. Now, we upgraded to A2, but the healthcheck issue is still present.
    I assume you 'll informed via the support case?

  • Adding port in http header information??

    I have a standard HTTPS to HTTP conversion going through a CSS 11506. The CSS terminates the SSL and then passes the cleartext traffic to the backend server via port 8011. The backend server receives this traffic on port 8011 but the http header does not specify port 8011 at the end of the url (e.g. http://mywebsite.com:8011/content but only passes through http://mysebsite.com/content). The backend server thinks this traffic has come in on port 80 and reports a 302 error (redirect). Is there some way the CSS can add the :8011 port number into the http header for all traffic bound to the backend server?
    Many thanks,
    Frank

    No, there is no way to add the port to the host info.
    You can run 2 different instances of the server - each one on its own port - so they don't need to verify the port inside the http request.
    Gilles.

  • How to set custom HTTP header for single sign on

    Currently we just begin to use an application called "etran". This application requires user name and password to login. Now, my assignment is to integrate etran application in our internal application. This means that somewhere in our internal application, there is a link leads to the etran application.
    It is going to be single sign on, that means that once user logs into our internal application, when he/she clicks on the etran link, no sign on to etran is needed.
    I consult with the technical people in etran. they said that our internal application needs to send a "login request" to etran via SSL with the user's information encoded in base 64 format. etran captures the HTTP header containing user authentication and authorization information, and parses the required information from the HTTP header.
    My question is that how I set user information in HTTP header? From my understanding, once I am able to set the user information in HTTP header, it is in base 64 format?
    Thanks in advance for your help.

    sharon38_74 wrote:
    they said that our internal application needs to send a "login request" to etran via SSL with the user's information encoded in base 64 format. etran captures the HTTP header containing user authentication and authorization information, and parses the required information from the HTTP header.
    My question is that how I set user information in HTTP header? From my understanding, once I am able to set the user information in HTTP header, it is in base 64 format?Your application need to act like a proxy. You can invoke a HTTP request programmatically using java.net.URLConnection. You can set request headers using URLConnection#setRequestProperty(). Also see the API docs: [http://java.sun.com/javase/6/docs/api/java/net/URLConnection.html]. You only need to know the header field name where to set the Base64-encoded value in. You need to Base64-encode the value yourself.

  • How to read http  header from Forms

    Hi,
    I have a forms application deployed on 10g AS. We are planning to integrate Oracle Identity management with our forms application. Currently, I access my forms application with an url, say http://hostname/forms/frmservlet?config=test. And, I get a Signon form, where I capture the logon and pwd, and specific to the user credential, I show another form. By integrating my appln with Identity management, I would be protecting my resource in the oracle access system, the WebGate component will do the backend authentication process along with the access server and the directoy service. Upon successful authentication, the DN form the LDAP repository (lets say the userid of my forms application) for the user is returned to the WebGate as http header information/cookie by the Access System. Now without altering the code in frmservlet Servlet, I need to capture the http header info (which contains the userid for the forms application of the user) in my default Signon form. How can I capture this?
    Can someone please help
    Regards,
    Suresh

    hi
    the following link may helpful to you
    http://e-docs.bea.com/wls/docs81/webserv/anttasks.html#1111537
    Regards
    Prasanna Yalam

  • Errors with Resource Adapter with data source as "http header"

    hi Team,
    The objective was to create a ResourceAdapter that will get accountid from http-header and automatically log me in. More like Siteminder, Tivoli Access Mgr.
    In the adapter's "prototype.xml", I added this line.
    "<AuthnProperty name='sauid' displayName='UserID in From Browser' formFieldType='text' isId='true' dataSource='http header'/>
    I enable pass-through authn for "user-interface" app.
    My test passes, when I login to "/idm/user". I am not prompted for uid/pwd instead I am
    transparently logged and presented with self-service page, aka single-sign-on. so far so good.
    But, I have an issue when when I login to /idm (not /idm/user) as configurator and then try to create a new user.....I donot see the set password fields in modify.jsp. This issue is only apparent if I set enable pass-through for user-interface. If I reset the user interface to default, which is userid/pwd, then I do see set-password-fields in modify.jsp.
    Any leads on why this could be happening?

    Hi Asam,
    If we want to create a parameter depend on another dataset, we can additional create or add the dataset, embedded or shared, that has a query that contains query variables. Then use the option that “Get values from a
    query” to get available values. For more details, please see:http://msdn.microsoft.com/en-us/library/dd283107.aspx
    http://msdn.microsoft.com/en-us/library/dd220464.aspx
    As to the Report Builder features, we can refer to the following articles:http://technet.microsoft.com/en-us/library/hh213578.aspx
    http://technet.microsoft.com/en-us/library/hh965699.aspx
    Hope this helps.
    Thanks,
    Katherine Xiong
    Katherine Xiong
    TechNet Community Support

  • Custom Http header in remote object

    Hi, how to set custom http header in http request while using remote object in flex?

    Thank You, Patrick.
    You are best :)
    I read this APEX_WEB_SERVICE documentation before,
    but after I read once more time
    I found most important words "global variable g_request_headers".
    I think these variables must be described more in documentation.
    On APEX I did:
    1) Create New Page -> Form -> Form and Report On Webservice Results.
    2) Set all webservice paramters in page wizard.
    3) And create a new page process after submit:
    Begin
    apex_web_service.g_request_headers(1).name := 'username';
    apex_web_service.g_request_headers(1).value := ' ... ';
    apex_web_service.g_request_headers(2).name := 'password';
    apex_web_service.g_request_headers(2).value := ' ... ';
    End;
    4) It's most important that this process must be done before the webservice process.
    Good luck

  • How to configure https head on GSS-4492-k9 ver 3.2 (0)?

    I have upgraded gss to version 3.2(0) because I need to track a server that uses only https.
    I configured a https head KA VIP answer type but the answer never goes on-line.
    I tried using www.google.com as the VIP address but not go online too.
    The gss is behind a firewall.
    I suspected of the firewall but from the gss CLI it seems that the firewall is open for the https traffic:
    200.189.189.232 is the server IP and 74.125.234.48 is the www.google.com IP
    GSS-02.dms.local#telnet 200.189.189.232 443
    Trying 200.189.189.232...
    Connected to 200.189.189.232.
    Escape character is '^]'.
    Connection closed by foreign host.
    GSS-02.dms.local#telnet 74.125.234.48 443
    Trying 74.125.234.48...
    Connected to 74.125.234.48.
    Escape character is '^]'.
    Connection closed by foreign host.
    GSS-02.dms.local#
    Can anyone help me on this configuration?
    Thanks

    Hi,
    there's not much on CCO yet. Here's how the GUI looks like for the new probe:
    http://www.cisco.com/en/US/docs/app_ntwk_services/data_center_app_services/gss4400series/v3.2/release/note/GSSRN32.html#wp305534
    If you don't find any clue in the GSS logs, try taking a traffic capture to check what the server is responding to the probe. Keep in mind only code 200 is accepted as a positive reply.
    hope this helps,
    Fabrizio

  • SSO to other apps via HTTP header variable

    We are on NW EP6.0 SP16. We need to add the "user id" as http header variable so that other apps which are non SAP can access our header variable and log on with that user id. Is this available by default? Or we want to achieve this how best we can achieve this.
    We can use the code to get the user id and add it to header variable. If we use this route which is the jsp page we need to add the code?
    Thanks

    Hi,
      we can you login modules provided by SAP to accomplish this.. you can use header variable authentication login module to acheive your requirement.
      please refer: http://help.sap.com/saphelp_nw04/helpdata/en/8f/ae29411ab3db2be10000000a1550b0/frameset.htm
    Hope that helps.
    Regards,
    S.Divakar

  • Single-Sign-On (SSO) configuration on JAVA Stack through HTTP Header method

    Hello SDN community,
    in the context of a Proof of Concept, we are testing the integration of Microsoft Sharepoint Portal with SAP Backend (addin) systems.
    As the architecture impose use an external scenario (access from the internet), we couldn't use the Kerberos (SPNego) solution and thus we chosed the http header solution which in short uses an intermediary web server (in this case the IIS of the MOSS solution) which will act as authority.
    I miss information on how the workflow works for this http header authentication method. Through the visual administrator of the addin JAVA stack, it is possible to configure each application with a customized authentication (a choice of security modules). But this all that I know.
    My task is to configure SSO. From a sharepoint portal, the user should be able to access Web Dynpros and BSPs. I imagine that the very first call to a webdynpro or bsp (or maybe when we log on the sharepoint portal), the request to the WDP or BSP will first be forwareded by the intermediary server to the JAVA stack (or is it the SAP dispatcher that has to be configured).
    Is there an application to be built on the java stack to deal with the authentication, modify http header?
    What will the Java stack return? a sap long ticket? a token?
    How will the redirect work (to by example a BSP which is in the ABAP stack)?
    SAP preconise to secure with SSL the link between the intermediary web server and the JAVA stack, is IP restriction also a solution?
    A lot of questions about how this SSO http header should work,
    I would be very greatful for any help, or info,
    Kind regards,
    Tanguy Mezzano

    Hi Tanguy,
    to tell you the truth I'm really unsure about what you are trying to achieve. When I started posting to your thread I thought all you wanted was trying to access your J2EE engine via Browser and authenticate against the engine using HTTP Header Variables. Nevermind:
    Here are some answers to your question:
    in fact I did succeed, the problem was that even after domain-relaxation done by the J2EE, I had to change the domain of th SAP cookie to the bbbb.domain.com to be understood (I would have thought that all hosts in/under domain .domain would have accepted such a cookie but it seems that no...).
    The server does not care about the domain because Cookies in an HTTP Request do not contain any domain information. The domain is just important when the Cookie is set by the server so your Client (Browser) will know in which cases the Cookie may be sent or not. So if your domain is xxx.yyy.domain.com and your cookie is issued to .domain.com then your Browser will definitely sent it to all hosts under .domain.com (This includes xxx.yyy.domain.com etc.)
    My current scenario is: in a first request get a SAP Logon Ticket from the Java Stack, then change its domain and then directly call the backend with it.
    You can do that but there is no Client involved in this scenario. So this is useful if you just want to test the functionality (e.g. authentication to J2EE using Header Variables (This works finally!!!) and then use the fetched Logon Ticket to test SSO against any trusted Backend!!)
    So everything's is in a Java Client application without using any redirection.
    If I understand you, you're solution is from the Browser call a servlet (which is deployed on the Java Stack and has no authentication schema) by passing to it our http header.
    No, you should initially authenticate somewhere! I thought that maybe you had some resource you access before accessing the Java Stack. This could be any application (e.g. deployed on a Tomcat or JBOSS or other server or if you like even SAP J2EE). After authenticating there you are aware of the username and could use it to  procceed (e.g. Authenticate against the J2EE using the same user and HTTP Header authentication for that particular user!)
    That servlet will transfer the http header (with the HttpClient app) in order to get from the Java Stack a SAP Logon ticket, and then to redirect to the resource and by sending back the cookie in client browser. Am I correct?
    This was just a suggestion because I realized that there was no Client ever involved in any of your testing (looked strange to me!). I was just thinking that it would be easier for you to just get the Cookie into your Browser so your Browser would do the rest for you (in your case finally send the Logon Ticket Cookie to your Backend to test SSO using Logon Tickets!).
    The AuthenticatorServlet somehow serves as a Proxy to your client because your client is not able to set the Header Variable. That's why I initially suggested to use a Proxy (e.g. Apache) for that purpose. The problem is just that if you use a Proxy you will have to tell it somehow which username it should set in the Header Variable (e.g. using a URL Parameter or using a personalized client certificate and fetch the username (e.g. cn=<username> from the certificate!)
    This way of doing would simplify the calls for sso for each new application needing authentication, instead of having all code each time in it...
    I'm stuck again! Do you want to authenticate an End User or do you want to authenticate an application that needs to call any resources in your Backend that requires authentication?
    So my problem now, is how to call the servlet from the client browser:
    I'm trying to call my servlet from the browser but I don't succeed. I am able to understand how to reach a jsp from the Java Stack, but not to reach a servlet. I don't find the path to my servlet:
    <FORM method="POST" action="SSORedirect2" >
    A JSP is a servlet too. There is just no JAVA Class involved!
    You do not need any POST Request to invoke a Servlet.
    I see that my servlet is deployed, but I don't how what path to give to my form to invoke the servlet, here follows my web.xml
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE web-app (View Source for full doctype...)>
    - <web-app>
      <display-name>WEB APP</display-name>
      <description>WEB APP description</description>
    - <servlet>
      <servlet-name>SSOredirect2</servlet-name>
      <servlet-class>com.atosorigin.examples.AuthenticatorServlet</servlet-class>
      </servlet>
    - <servlet>
      <servlet-name>SSORedirect2.jsp</servlet-name>
      <jsp-file>/SSORedirect2.jsp</jsp-file>
      </servlet>
    - <security-constraint>
      <display-name>SecurityConstraint</display-name>
    - <web-resource-collection>
      <web-resource-name>WebResource</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      </web-resource-collection>
    - <auth-constraint>
      <role-name>DefaultSecurityRole</role-name>
      </auth-constraint>
      </security-constraint>
    - <security-role>
      <role-name>DefaultSecurityRole</role-name>
      </security-role>
      </web-app>
    If you have an AuthenticatorServlet Class all you need is to add the Servlet Mapping in your web.xml file
    e.g.
    <servlet>
      <description>
      </description>
      <display-name>AuthenticatorServlet</display-name>
      <servlet-name>AuthenticatorServlet</servlet-name>
      <servlet-class>com.atosorigin.examples.AuthenticatorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>AuthenticatorServlet</servlet-name>
      <url-pattern>/AuthenticatorServlet</url-pattern>
    </servlet-mapping>
    You can directly call the Servlet in your Browser by calling the URL provided in the url-pattern of your Servlet mapping ( in this case /AuthenticatorServlet). The engine will invoke the Class "com.atosorigin.examples.AuthenticatorServlet" in the background and do whatever you defined there!
    I have also to pass my http header and the redirectUrl in the GET request.
    If you like! I just suggested this for testing purposes. As I stated before you need a way to tell your proxy (or in your case AuthenticatorServlet) which user should be set when calling the Engine in order to authenticate using HTTP Header. You could use the URL Paramater to define the user you actually want to use when you set the Header Variable.
    I just introduced the redirectURL because you were talking about redirects all the time. So if you finally want to call the Backend you could define the Backend URL in the redirectURL Parameter and the Servlet will make sure that you are redirected to this location after the whole process!
    Thx for your input very helpful,
    But again 0 points
    Cheers

  • What happens to the HTTP header parameters I put there?

    Our tool puts some parameters into the HTTP header. But, it appears that the Dispatcher is not passing them to the WAS.  Could this be?
    Is there a way to tell the Dispatcher to not drop our HTTP header stuff? Perhaps a configuration setting? I didn't find any.
    When I set a break in my servlet running on NW WAS, I see:
    referer:
    Cookie:
    etc.
    but I don't see the parameters we put there.
    This is the NW SneakPreview download.

    Hi Farokh,
    I think there should be much problem passing parameters  through the Url. I am sorry however that I have not worked much on the Servlet but on WebDynpro, which I can share with you if its of any use to you.
    Regards
    Noufal

  • How do I set the Http Header POST URL in SAAJ?

    Hi ,
    I am a newbie in the field of web services. I was trying to create a SOAP request with Http Header POST information having a POST url like
    the following:
    POST /OMASTI.xml HTTP/1.1
    Content-Type: multipart/related; boundary="eladeladeladeladeladeladeladeladelad"; type=text/xml; start=11814460
    Content-Length: 54596
    Host: unspecified
    SOAPAction: ""
    to that effect I did the following in the SAAJ client:
    MimeHeaders md = message.getMimeHeaders();
              md.setHeader("SOAPAction" ,"\"\"");
              md.setHeader("POST" ,"/OMASTI.xml");
    However what I got was :
    POST / HTTP/1.1
    Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    SOAPAction: ""
    POST: /OMASTI.xml
    Content-Type: multipart/related; type="text/xml"; boundary="----=_Part_2_32124414.1153146262750"
    Content-Length: 3352
    Cache-Control: no-cache
    Pragma: no-cache
    User-Agent: Java/1.5.0_07
    Host: www.google.com
    Connection: keep-alive
    I have two POSTs in the header. How do I fix it? Please Help ASAP.
    Regards,
    Zeus

    Hi,
    Please forgive my ignorance. I did the same as you said. and then checked the Http request being sent out using ethreal software... it was the same as I had told earlier. Is only POST supported by the connection object? And the does the URL that comes in the Mime header as POST refer to the URL to which the request was sent? what I mean is that if the mime header says
    POST /OMASTI.xml HTTP 1.1, does it mean that the URL that was passed to the connection object was "/OMASTI.xml" ? I had given the url as http://www.google.com to test the request being sent.. I only have a sample SOAP request which shows a HTTP header with the post url as I said before. I need to create a SOAP request with the same sort of Http header and the body needs to follow a certain OMA-STI protocol. My experience in the SOAP domain is almost nil. So please enlighten me.
    Thanks in advance,
    zeus

  • Error in setting up HTTP Header Variable Authentication

    Hi,
    I am trying to set-up SSO for SAP Biller Direct aplication (deployed on SAP J2EE 7.0) using HTTP Header variable authentication.
    As per SAP documentation I have created a new login module "HeaderVariableLoginModule" pointing to class "com.sap.security.core.server.jaas.HeaderVariableLoginModule".
    Then I have added this new login module to Statck "Ticket" and the new config looks as below. HTTP header when UID is passed is USI_LOP.
    Name                                                                                Flag                                            Options
    com.sap.security.core.server.jaas.HeaderVariableLoginModule    Sufficient                                    ume.configuration.active= tue,
                                                                                    Header=USI_LOP
    BasicPasswordLoginModule                                                           Optional
    CreateTicketLoginModule                                                                 Optional                                         ume.configuration.active= tue
    EvaluateTicketLoginModule                                                              Sufficient                                      ume.configuration.active= tue
    The problem I am now having is that the authentication through HTTP_HEADEr does not work. Even though I ahve increased the trace level for JAAS module to debug, there is not any type of information generated in the log.
    Each time I call the Biller Direct URL from the extrenal web server which also passes the HEADER variable for Authntication, the authrisation just fails and I am being shown a Logon Screen to pust UID/PASSWORD.
    Can someone please guide me, how I can debug this? There is very no information whether anyone tried to login with HEADER varibale and that has failed...
    Also, I am not pretty sure whether I am using the right Authentication Stack, which is is Ticket in my case..
    But when I enter the application without any URL redirects and enter UID and password directly for Biller Direct, I get the following in log file, which makes me believe that I am using the right stack.
    LOGIN.OK
    User: CONDLG
    Authentication Stack: ticket
    Login Module                                                               Flag        Initialize  Login      Commit     Abort      Details
    1. com.sap.security.core.server.jaas.HeaderVariableLoginModule             SUFFICIENT  ok          false      false                
    2. com.sap.engine.services.security.server.jaas.BasicPasswordLoginModule   OPTIONAL    ok          true       true                 
    3. com.sap.security.core.server.jaas.CreateTicketLoginModule               OPTIONAL    ok          true       true                 
    4. com.sap.security.core.server.jaas.EvaluateTicketLoginModule             SUFFICIENT  ok          false      false                
    Central Checks                                                                                true                 
    Any help will be very much apprecated..
    Thanks,
    Vikrant Sud

    Vikrant,
    The reason why it is not working is because your login modules in ticket stack are in wrong order and with wrong flags. The first one should be EvaluateTicketLoginModule with flag=SUFFICIENT, then the Header Variable login module, with flag=OPTIONAL, then CreateTicketLoginModule with flag=SUFFICIENT, then BasicPasswordLoginModule with flag=REQUISITE, and lastly CreateTicektLoginModule with flag=OPTIONAL
    Thanks,
    Tim

  • Any way to get HTTP header in web dynpro Java?

    Is there any way to get HTTP header in web dynpro java? This method gives me the params. Is params same as header? It doesn't have any way to retrieve header data. I am on NW 7.0.19
    WDProtocolAdapter.getProtocolAdapter().getRequestObject().getParameter("param");

    Dear Faraz,
    I'm afraid the code you've pasted is only to retrieve URL parameters.
    Have you tried this document to see if it offers any good hint:
    [http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/b0446f5c-fcb9-2910-e082-88becbe3ddc9]
    Not sure if you can process the HTTP header with a WD4J.
    An alternative could be to develop some Portal component in plain JAVA working as a proxy to call your WD4J afterwards.
    That portal component would process your HTTP header and forward any parameter to your WD4J.
    But this is me just guessing.
    Kind Regards
    /Ricardo

Maybe you are looking for

  • Advanced Selection for Source File + SourceFileSize = invalid file size?

    Hi ! I have a File Adapter using FTP protocol. I've turn on all Adapter-Specific Message Attributes, including SourceFileSize. I've activated the Advanced Selection for Source File, and entered several patterns. When I see my payload via the monitor,

  • Problem in down loading CUSTOMER_MAIN object

    Hi Experts we have done filter settings to download single customer master from ECC 6.0 toCRM 5.0. After intial load,  the object CUSTOMER_MAIN still in running status for a long time in R3AM1. Please help us how to resolve this Thanks & regards Vikr

  • How to Suppress Group Headers????

    Hi all, Iam working on this report in which I have a format trigger to suppress the null records.The records are not displayed however the group headers & the heading in the margin continue to be displayed.Also how can I remove the Blank spaces being

  • Access BSP content via webdav

    Hello all, I am trying to read all bsp page fragments from a bsp application using webdav but it is not working. I am creating a new network connection on windows 2000: http://<server name>:<port>/sap/bc/bsp/sap/crm_ic_dt_rep/ CRM)IC_DT_REP is the bs

  • Computer crashed, reloaded CS5, says serial number not for qualifying product

    Loaded CS5 on new computer successfully.  loaded updates successfully. Trying to load CS5 on 2nd computer (old computer with new Windows 7 installation) and after it loads and I try to install updates... the updates fail to load and I get the followi