Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

spring - How can I pass a generic (parameter,value)-couple from my login controller to my authentication provider?

What I want to do is read a http-parameter on my login page, e.g. login.html?param=value, and then pass value to my AuthenticationProvider. My idea was to somehow save value in a hidden parameter, but I still don't know how to pass it on. Is this possible? How do I go about to do it?

Edit: Following Sanath's advice and after doing some reading I was finally able to solve the problem -- look below if you're interested in how I did it.

like image 287
ingenious Avatar asked Dec 02 '25 12:12

ingenious


1 Answers

I did the following and finally it worked like a charm.

In my bean configuration file I had to enter:

<http auto-config="true>
  ...
  <form-login ... authentication-details-source-ref="myWebAuthDetSource"/>
  ...
</http>
<beans:bean id="myWebAuthDetSource" class="com.my.pack.age.MyWebAuthDetSource"/>
...

then I've set up my WebAuthenticationDetailsSource implementation like this:

public class MyWebAuthDetSource implements AuthenticationDetailsSource<HttpServletRequest, MyWebAuthDets> {
  public MyWebAuthDetSource buildDetails (HttpServletRequest context) {
    return new MyWebAuthDets(context);
  }
}

then I've got my AuthenticationDetails implementation like:

public class MyWebAuthDets extends WebAuthenticationDetails {
  private final String parameter;
  public MyWebAuthDets(HttpServletRequest request) {
    super(request);
    this.parameter = request.getParameter("paramId");
  }
}

And then I overlook the most simple fact, that the authentication process processes only what it gets on submit from the login form, so I simply had to add the following in login.jsp:

...
<form id="j_spring_security_check" ... >
  <input type="hidden" name="paramID" value="${param['paramID']}" />
  ...
</form>
...

And that was all. Now I can add an authenticationProvider and get my parameter with .getDetails() from the authenticationToken.

Thanks again @Sanath.

like image 109
ingenious Avatar answered Dec 04 '25 09:12

ingenious



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!